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);
487 int __ocfs2_sync_dquot(struct dquot *dquot, int freeing)
490 struct super_block *sb = dquot->dq_sb;
491 int type = dquot->dq_id.type;
499 dquot->dq_off);
512 spin_lock(&dquot->dq_dqb_lock);
513 spacechange = dquot->dq_dqb.dqb_curspace -
514 OCFS2_DQUOT(dquot)->dq_origspace;
515 inodechange = dquot->dq_dqb.dqb_curinodes -
516 OCFS2_DQUOT(dquot)->dq_originodes;
517 olditime = dquot->dq_dqb.dqb_itime;
518 oldbtime = dquot->dq_dqb.dqb_btime;
519 ocfs2_global_disk2memdqb(dquot, &dqblk);
520 trace_ocfs2_sync_dquot(from_kqid(&init_user_ns, dquot->dq_id),
521 dquot->dq_dqb.dqb_curspace,
523 dquot->dq_dqb.dqb_curinodes,
525 if (!test_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags))
526 dquot->dq_dqb.dqb_curspace += spacechange;
527 if (!test_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags))
528 dquot->dq_dqb.dqb_curinodes += inodechange;
530 if (dquot->dq_dqb.dqb_bsoftlimit &&
531 dquot->dq_dqb.dqb_curspace > dquot->dq_dqb.dqb_bsoftlimit) {
532 if (!test_bit(DQ_LASTSET_B + QIF_BTIME_B, &dquot->dq_flags) &&
534 if (dquot->dq_dqb.dqb_btime > 0)
535 dquot->dq_dqb.dqb_btime =
536 min(dquot->dq_dqb.dqb_btime, oldbtime);
538 dquot->dq_dqb.dqb_btime = oldbtime;
541 dquot->dq_dqb.dqb_btime = 0;
542 clear_bit(DQ_BLKS_B, &dquot->dq_flags);
545 if (dquot->dq_dqb.dqb_isoftlimit &&
546 dquot->dq_dqb.dqb_curinodes > dquot->dq_dqb.dqb_isoftlimit) {
547 if (!test_bit(DQ_LASTSET_B + QIF_ITIME_B, &dquot->dq_flags) &&
549 if (dquot->dq_dqb.dqb_itime > 0)
550 dquot->dq_dqb.dqb_itime =
551 min(dquot->dq_dqb.dqb_itime, olditime);
553 dquot->dq_dqb.dqb_itime = olditime;
556 dquot->dq_dqb.dqb_itime = 0;
557 clear_bit(DQ_INODES_B, &dquot->dq_flags);
560 __clear_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags);
561 __clear_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags);
562 __clear_bit(DQ_LASTSET_B + QIF_BLIMITS_B, &dquot->dq_flags);
563 __clear_bit(DQ_LASTSET_B + QIF_ILIMITS_B, &dquot->dq_flags);
564 __clear_bit(DQ_LASTSET_B + QIF_BTIME_B, &dquot->dq_flags);
565 __clear_bit(DQ_LASTSET_B + QIF_ITIME_B, &dquot->dq_flags);
566 OCFS2_DQUOT(dquot)->dq_origspace = dquot->dq_dqb.dqb_curspace;
567 OCFS2_DQUOT(dquot)->dq_originodes = dquot->dq_dqb.dqb_curinodes;
568 spin_unlock(&dquot->dq_dqb_lock);
572 " (type=%d, id=%u)\n", dquot->dq_id.type,
573 (unsigned)from_kqid(&init_user_ns, dquot->dq_id));
577 OCFS2_DQUOT(dquot)->dq_use_count--;
578 err = qtree_write_dquot(&info->dqi_gi, dquot);
581 if (freeing && !OCFS2_DQUOT(dquot)->dq_use_count) {
582 err = qtree_release_dquot(&info->dqi_gi, dquot);
600 static int ocfs2_sync_dquot_helper(struct dquot *dquot, unsigned long type)
603 struct super_block *sb = dquot->dq_sb;
609 trace_ocfs2_sync_dquot_helper(from_kqid(&init_user_ns, dquot->dq_id),
610 dquot->dq_id.type,
612 if (type != dquot->dq_id.type)
626 status = ocfs2_sync_dquot(dquot);
630 status = ocfs2_local_write_dquot(dquot);
666 static int ocfs2_write_dquot(struct dquot *dquot)
669 struct ocfs2_super *osb = OCFS2_SB(dquot->dq_sb);
673 trace_ocfs2_write_dquot(from_kqid(&init_user_ns, dquot->dq_id),
674 dquot->dq_id.type);
682 down_write(&sb_dqopt(dquot->dq_sb)->dqio_sem);
684 status = ocfs2_local_write_dquot(dquot);
686 up_write(&sb_dqopt(dquot->dq_sb)->dqio_sem);
721 * Called when the last reference to dquot is dropped. If we are called from
727 static int ocfs2_release_dquot(struct dquot *dquot)
731 sb_dqinfo(dquot->dq_sb, dquot->dq_id.type)->dqi_priv;
732 struct ocfs2_super *osb = OCFS2_SB(dquot->dq_sb);
735 trace_ocfs2_release_dquot(from_kqid(&init_user_ns, dquot->dq_id),
736 dquot->dq_id.type);
738 mutex_lock(&dquot->dq_lock);
740 if (dquot_is_busy(dquot))
745 * Grab our own reference to dquot and queue it for delayed
747 * ->release_dquot() and won't free dquot structure.
749 dqgrab(dquot);
751 if (llist_add(&OCFS2_DQUOT(dquot)->list, &osb->dquot_drop_list))
759 ocfs2_calc_qdel_credits(dquot->dq_sb, dquot->dq_id.type));
766 status = ocfs2_global_release_dquot(dquot);
771 status = ocfs2_local_release_dquot(handle, dquot);
781 * elsewhere by another node while our dquot structure is on freelist.
783 dquot->dq_off = 0;
784 clear_bit(DQ_ACTIVE_B, &dquot->dq_flags);
790 mutex_unlock(&dquot->dq_lock);
797 * Read global dquot structure from disk or create it if it does
801 static int ocfs2_acquire_dquot(struct dquot *dquot)
805 struct super_block *sb = dquot->dq_sb;
807 int type = dquot->dq_id.type;
813 trace_ocfs2_acquire_dquot(from_kqid(&init_user_ns, dquot->dq_id),
815 mutex_lock(&dquot->dq_lock);
818 * and instantiate possibly new dquot structure
827 * We always want to read dquot structure from disk because we don't
830 status = qtree_read_dquot(&info->dqi_gi, dquot);
835 OCFS2_DQUOT(dquot)->dq_use_count++;
836 OCFS2_DQUOT(dquot)->dq_origspace = dquot->dq_dqb.dqb_curspace;
837 OCFS2_DQUOT(dquot)->dq_originodes = dquot->dq_dqb.dqb_curinodes;
838 if (!dquot->dq_off) { /* No real quota entry? */
861 status = qtree_write_dquot(&info->dqi_gi, dquot);
875 status = ocfs2_create_local_dquot(dquot);
878 set_bit(DQ_ACTIVE_B, &dquot->dq_flags);
880 mutex_unlock(&dquot->dq_lock);
917 static int ocfs2_mark_dquot_dirty(struct dquot *dquot)
927 struct super_block *sb = dquot->dq_sb;
928 int type = dquot->dq_id.type;
934 trace_ocfs2_mark_dquot_dirty(from_kqid(&init_user_ns, dquot->dq_id),
937 /* In case user set some limits, sync dquot immediately to global
939 spin_lock(&dquot->dq_dqb_lock);
940 if (dquot->dq_flags & mask)
942 spin_unlock(&dquot->dq_dqb_lock);
946 status = ocfs2_write_dquot(dquot);
960 status = ocfs2_sync_dquot(dquot);
965 /* Now write updated local dquot structure */
966 status = ocfs2_local_write_dquot(dquot);
1005 static struct dquot *ocfs2_alloc_dquot(struct super_block *sb, int type)
1007 struct ocfs2_dquot *dquot =
1010 if (!dquot)
1012 return &dquot->dq_dquot;
1015 static void ocfs2_destroy_dquot(struct dquot *dquot)
1017 kmem_cache_free(ocfs2_dquot_cachep, dquot);
1021 /* We never make dquot dirty so .write_dquot is never called */