Lines Matching refs:dquot
38 * by dqio_sem or dquot->dq_lock.
52 * Acquire dquot for the first time:
58 * Release last reference to dquot:
71 static void ocfs2_global_disk2memdqb(struct dquot *dquot, void *dp)
74 struct mem_dqblk *m = &dquot->dq_dqb;
77 if (!test_bit(DQ_LASTSET_B + QIF_ILIMITS_B, &dquot->dq_flags)) {
81 if (!test_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags))
83 if (!test_bit(DQ_LASTSET_B + QIF_BLIMITS_B, &dquot->dq_flags)) {
87 if (!test_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags))
89 if (!test_bit(DQ_LASTSET_B + QIF_BTIME_B, &dquot->dq_flags))
91 if (!test_bit(DQ_LASTSET_B + QIF_ITIME_B, &dquot->dq_flags))
93 OCFS2_DQUOT(dquot)->dq_use_count = le32_to_cpu(d->dqb_use_count);
96 static void ocfs2_global_mem2diskdqb(void *dp, struct dquot *dquot)
99 struct mem_dqblk *m = &dquot->dq_dqb;
101 d->dqb_id = cpu_to_le32(from_kqid(&init_user_ns, dquot->dq_id));
102 d->dqb_use_count = cpu_to_le32(OCFS2_DQUOT(dquot)->dq_use_count);
114 static int ocfs2_global_is_id(void *dp, struct dquot *dquot)
118 sb_dqinfo(dquot->dq_sb, dquot->dq_id.type)->dqi_priv;
123 return qid_eq(make_kqid(&init_user_ns, dquot->dq_id.type,
125 dquot->dq_id);
484 int __ocfs2_sync_dquot(struct dquot *dquot, int freeing)
487 struct super_block *sb = dquot->dq_sb;
488 int type = dquot->dq_id.type;
496 dquot->dq_off);
509 spin_lock(&dquot->dq_dqb_lock);
510 spacechange = dquot->dq_dqb.dqb_curspace -
511 OCFS2_DQUOT(dquot)->dq_origspace;
512 inodechange = dquot->dq_dqb.dqb_curinodes -
513 OCFS2_DQUOT(dquot)->dq_originodes;
514 olditime = dquot->dq_dqb.dqb_itime;
515 oldbtime = dquot->dq_dqb.dqb_btime;
516 ocfs2_global_disk2memdqb(dquot, &dqblk);
517 trace_ocfs2_sync_dquot(from_kqid(&init_user_ns, dquot->dq_id),
518 dquot->dq_dqb.dqb_curspace,
520 dquot->dq_dqb.dqb_curinodes,
522 if (!test_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags))
523 dquot->dq_dqb.dqb_curspace += spacechange;
524 if (!test_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags))
525 dquot->dq_dqb.dqb_curinodes += inodechange;
527 if (dquot->dq_dqb.dqb_bsoftlimit &&
528 dquot->dq_dqb.dqb_curspace > dquot->dq_dqb.dqb_bsoftlimit) {
529 if (!test_bit(DQ_LASTSET_B + QIF_BTIME_B, &dquot->dq_flags) &&
531 if (dquot->dq_dqb.dqb_btime > 0)
532 dquot->dq_dqb.dqb_btime =
533 min(dquot->dq_dqb.dqb_btime, oldbtime);
535 dquot->dq_dqb.dqb_btime = oldbtime;
538 dquot->dq_dqb.dqb_btime = 0;
539 clear_bit(DQ_BLKS_B, &dquot->dq_flags);
542 if (dquot->dq_dqb.dqb_isoftlimit &&
543 dquot->dq_dqb.dqb_curinodes > dquot->dq_dqb.dqb_isoftlimit) {
544 if (!test_bit(DQ_LASTSET_B + QIF_ITIME_B, &dquot->dq_flags) &&
546 if (dquot->dq_dqb.dqb_itime > 0)
547 dquot->dq_dqb.dqb_itime =
548 min(dquot->dq_dqb.dqb_itime, olditime);
550 dquot->dq_dqb.dqb_itime = olditime;
553 dquot->dq_dqb.dqb_itime = 0;
554 clear_bit(DQ_INODES_B, &dquot->dq_flags);
557 __clear_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags);
558 __clear_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags);
559 __clear_bit(DQ_LASTSET_B + QIF_BLIMITS_B, &dquot->dq_flags);
560 __clear_bit(DQ_LASTSET_B + QIF_ILIMITS_B, &dquot->dq_flags);
561 __clear_bit(DQ_LASTSET_B + QIF_BTIME_B, &dquot->dq_flags);
562 __clear_bit(DQ_LASTSET_B + QIF_ITIME_B, &dquot->dq_flags);
563 OCFS2_DQUOT(dquot)->dq_origspace = dquot->dq_dqb.dqb_curspace;
564 OCFS2_DQUOT(dquot)->dq_originodes = dquot->dq_dqb.dqb_curinodes;
565 spin_unlock(&dquot->dq_dqb_lock);
569 " (type=%d, id=%u)\n", dquot->dq_id.type,
570 (unsigned)from_kqid(&init_user_ns, dquot->dq_id));
574 OCFS2_DQUOT(dquot)->dq_use_count--;
575 err = qtree_write_dquot(&info->dqi_gi, dquot);
578 if (freeing && !OCFS2_DQUOT(dquot)->dq_use_count) {
579 err = qtree_release_dquot(&info->dqi_gi, dquot);
597 static int ocfs2_sync_dquot_helper(struct dquot *dquot, unsigned long type)
600 struct super_block *sb = dquot->dq_sb;
605 trace_ocfs2_sync_dquot_helper(from_kqid(&init_user_ns, dquot->dq_id),
606 dquot->dq_id.type,
608 if (type != dquot->dq_id.type)
621 status = ocfs2_sync_dquot(dquot);
625 status = ocfs2_local_write_dquot(dquot);
660 static int ocfs2_write_dquot(struct dquot *dquot)
663 struct ocfs2_super *osb = OCFS2_SB(dquot->dq_sb);
666 trace_ocfs2_write_dquot(from_kqid(&init_user_ns, dquot->dq_id),
667 dquot->dq_id.type);
675 down_write(&sb_dqopt(dquot->dq_sb)->dqio_sem);
676 status = ocfs2_local_write_dquot(dquot);
677 up_write(&sb_dqopt(dquot->dq_sb)->dqio_sem);
712 * Called when the last reference to dquot is dropped. If we are called from
718 static int ocfs2_release_dquot(struct dquot *dquot)
722 sb_dqinfo(dquot->dq_sb, dquot->dq_id.type)->dqi_priv;
723 struct ocfs2_super *osb = OCFS2_SB(dquot->dq_sb);
726 trace_ocfs2_release_dquot(from_kqid(&init_user_ns, dquot->dq_id),
727 dquot->dq_id.type);
729 mutex_lock(&dquot->dq_lock);
731 if (dquot_is_busy(dquot))
736 * Grab our own reference to dquot and queue it for delayed
738 * ->release_dquot() and won't free dquot structure.
740 dqgrab(dquot);
742 if (llist_add(&OCFS2_DQUOT(dquot)->list, &osb->dquot_drop_list))
750 ocfs2_calc_qdel_credits(dquot->dq_sb, dquot->dq_id.type));
757 status = ocfs2_global_release_dquot(dquot);
762 status = ocfs2_local_release_dquot(handle, dquot);
772 * elsewhere by another node while our dquot structure is on freelist.
774 dquot->dq_off = 0;
775 clear_bit(DQ_ACTIVE_B, &dquot->dq_flags);
781 mutex_unlock(&dquot->dq_lock);
788 * Read global dquot structure from disk or create it if it does
792 static int ocfs2_acquire_dquot(struct dquot *dquot)
796 struct super_block *sb = dquot->dq_sb;
798 int type = dquot->dq_id.type;
804 trace_ocfs2_acquire_dquot(from_kqid(&init_user_ns, dquot->dq_id),
806 mutex_lock(&dquot->dq_lock);
809 * and instantiate possibly new dquot structure
818 * We always want to read dquot structure from disk because we don't
821 status = qtree_read_dquot(&info->dqi_gi, dquot);
826 OCFS2_DQUOT(dquot)->dq_use_count++;
827 OCFS2_DQUOT(dquot)->dq_origspace = dquot->dq_dqb.dqb_curspace;
828 OCFS2_DQUOT(dquot)->dq_originodes = dquot->dq_dqb.dqb_curinodes;
829 if (!dquot->dq_off) { /* No real quota entry? */
852 status = qtree_write_dquot(&info->dqi_gi, dquot);
866 status = ocfs2_create_local_dquot(dquot);
869 set_bit(DQ_ACTIVE_B, &dquot->dq_flags);
871 mutex_unlock(&dquot->dq_lock);
908 static int ocfs2_mark_dquot_dirty(struct dquot *dquot)
918 struct super_block *sb = dquot->dq_sb;
919 int type = dquot->dq_id.type;
924 trace_ocfs2_mark_dquot_dirty(from_kqid(&init_user_ns, dquot->dq_id),
927 /* In case user set some limits, sync dquot immediately to global
929 spin_lock(&dquot->dq_dqb_lock);
930 if (dquot->dq_flags & mask)
932 spin_unlock(&dquot->dq_dqb_lock);
936 status = ocfs2_write_dquot(dquot);
949 status = ocfs2_sync_dquot(dquot);
954 /* Now write updated local dquot structure */
955 status = ocfs2_local_write_dquot(dquot);
993 static struct dquot *ocfs2_alloc_dquot(struct super_block *sb, int type)
995 struct ocfs2_dquot *dquot =
998 if (!dquot)
1000 return &dquot->dq_dquot;
1003 static void ocfs2_destroy_dquot(struct dquot *dquot)
1005 kmem_cache_free(ocfs2_dquot_cachep, dquot);
1009 /* We never make dquot dirty so .write_dquot is never called */