Lines Matching refs:dquot

71 static void ocfs2_global_disk2memdqb(struct dquot *dquot, void *dp)  in ocfs2_global_disk2memdqb()  argument
74 struct mem_dqblk *m = &dquot->dq_dqb; in ocfs2_global_disk2memdqb()
77 if (!test_bit(DQ_LASTSET_B + QIF_ILIMITS_B, &dquot->dq_flags)) { in ocfs2_global_disk2memdqb()
81 if (!test_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags)) in ocfs2_global_disk2memdqb()
83 if (!test_bit(DQ_LASTSET_B + QIF_BLIMITS_B, &dquot->dq_flags)) { in ocfs2_global_disk2memdqb()
87 if (!test_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags)) in ocfs2_global_disk2memdqb()
89 if (!test_bit(DQ_LASTSET_B + QIF_BTIME_B, &dquot->dq_flags)) in ocfs2_global_disk2memdqb()
91 if (!test_bit(DQ_LASTSET_B + QIF_ITIME_B, &dquot->dq_flags)) in ocfs2_global_disk2memdqb()
93 OCFS2_DQUOT(dquot)->dq_use_count = le32_to_cpu(d->dqb_use_count); in ocfs2_global_disk2memdqb()
96 static void ocfs2_global_mem2diskdqb(void *dp, struct dquot *dquot) in ocfs2_global_mem2diskdqb() argument
99 struct mem_dqblk *m = &dquot->dq_dqb; in ocfs2_global_mem2diskdqb()
101 d->dqb_id = cpu_to_le32(from_kqid(&init_user_ns, dquot->dq_id)); in ocfs2_global_mem2diskdqb()
102 d->dqb_use_count = cpu_to_le32(OCFS2_DQUOT(dquot)->dq_use_count); in ocfs2_global_mem2diskdqb()
114 static int ocfs2_global_is_id(void *dp, struct dquot *dquot) in ocfs2_global_is_id() argument
118 sb_dqinfo(dquot->dq_sb, dquot->dq_id.type)->dqi_priv; in ocfs2_global_is_id()
123 return qid_eq(make_kqid(&init_user_ns, dquot->dq_id.type, in ocfs2_global_is_id()
125 dquot->dq_id); in ocfs2_global_is_id()
484 int __ocfs2_sync_dquot(struct dquot *dquot, int freeing) in __ocfs2_sync_dquot() argument
487 struct super_block *sb = dquot->dq_sb; in __ocfs2_sync_dquot()
488 int type = dquot->dq_id.type; in __ocfs2_sync_dquot()
496 dquot->dq_off); in __ocfs2_sync_dquot()
509 spin_lock(&dquot->dq_dqb_lock); in __ocfs2_sync_dquot()
510 spacechange = dquot->dq_dqb.dqb_curspace - in __ocfs2_sync_dquot()
511 OCFS2_DQUOT(dquot)->dq_origspace; in __ocfs2_sync_dquot()
512 inodechange = dquot->dq_dqb.dqb_curinodes - in __ocfs2_sync_dquot()
513 OCFS2_DQUOT(dquot)->dq_originodes; in __ocfs2_sync_dquot()
514 olditime = dquot->dq_dqb.dqb_itime; in __ocfs2_sync_dquot()
515 oldbtime = dquot->dq_dqb.dqb_btime; in __ocfs2_sync_dquot()
516 ocfs2_global_disk2memdqb(dquot, &dqblk); in __ocfs2_sync_dquot()
517 trace_ocfs2_sync_dquot(from_kqid(&init_user_ns, dquot->dq_id), in __ocfs2_sync_dquot()
518 dquot->dq_dqb.dqb_curspace, in __ocfs2_sync_dquot()
520 dquot->dq_dqb.dqb_curinodes, in __ocfs2_sync_dquot()
522 if (!test_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags)) in __ocfs2_sync_dquot()
523 dquot->dq_dqb.dqb_curspace += spacechange; in __ocfs2_sync_dquot()
524 if (!test_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags)) in __ocfs2_sync_dquot()
525 dquot->dq_dqb.dqb_curinodes += inodechange; in __ocfs2_sync_dquot()
527 if (dquot->dq_dqb.dqb_bsoftlimit && in __ocfs2_sync_dquot()
528 dquot->dq_dqb.dqb_curspace > dquot->dq_dqb.dqb_bsoftlimit) { in __ocfs2_sync_dquot()
529 if (!test_bit(DQ_LASTSET_B + QIF_BTIME_B, &dquot->dq_flags) && in __ocfs2_sync_dquot()
531 if (dquot->dq_dqb.dqb_btime > 0) in __ocfs2_sync_dquot()
532 dquot->dq_dqb.dqb_btime = in __ocfs2_sync_dquot()
533 min(dquot->dq_dqb.dqb_btime, oldbtime); in __ocfs2_sync_dquot()
535 dquot->dq_dqb.dqb_btime = oldbtime; in __ocfs2_sync_dquot()
538 dquot->dq_dqb.dqb_btime = 0; in __ocfs2_sync_dquot()
539 clear_bit(DQ_BLKS_B, &dquot->dq_flags); in __ocfs2_sync_dquot()
542 if (dquot->dq_dqb.dqb_isoftlimit && in __ocfs2_sync_dquot()
543 dquot->dq_dqb.dqb_curinodes > dquot->dq_dqb.dqb_isoftlimit) { in __ocfs2_sync_dquot()
544 if (!test_bit(DQ_LASTSET_B + QIF_ITIME_B, &dquot->dq_flags) && in __ocfs2_sync_dquot()
546 if (dquot->dq_dqb.dqb_itime > 0) in __ocfs2_sync_dquot()
547 dquot->dq_dqb.dqb_itime = in __ocfs2_sync_dquot()
548 min(dquot->dq_dqb.dqb_itime, olditime); in __ocfs2_sync_dquot()
550 dquot->dq_dqb.dqb_itime = olditime; in __ocfs2_sync_dquot()
553 dquot->dq_dqb.dqb_itime = 0; in __ocfs2_sync_dquot()
554 clear_bit(DQ_INODES_B, &dquot->dq_flags); in __ocfs2_sync_dquot()
557 __clear_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags); in __ocfs2_sync_dquot()
558 __clear_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags); in __ocfs2_sync_dquot()
559 __clear_bit(DQ_LASTSET_B + QIF_BLIMITS_B, &dquot->dq_flags); in __ocfs2_sync_dquot()
560 __clear_bit(DQ_LASTSET_B + QIF_ILIMITS_B, &dquot->dq_flags); in __ocfs2_sync_dquot()
561 __clear_bit(DQ_LASTSET_B + QIF_BTIME_B, &dquot->dq_flags); in __ocfs2_sync_dquot()
562 __clear_bit(DQ_LASTSET_B + QIF_ITIME_B, &dquot->dq_flags); in __ocfs2_sync_dquot()
563 OCFS2_DQUOT(dquot)->dq_origspace = dquot->dq_dqb.dqb_curspace; in __ocfs2_sync_dquot()
564 OCFS2_DQUOT(dquot)->dq_originodes = dquot->dq_dqb.dqb_curinodes; in __ocfs2_sync_dquot()
565 spin_unlock(&dquot->dq_dqb_lock); in __ocfs2_sync_dquot()
569 " (type=%d, id=%u)\n", dquot->dq_id.type, in __ocfs2_sync_dquot()
570 (unsigned)from_kqid(&init_user_ns, dquot->dq_id)); in __ocfs2_sync_dquot()
574 OCFS2_DQUOT(dquot)->dq_use_count--; in __ocfs2_sync_dquot()
575 err = qtree_write_dquot(&info->dqi_gi, dquot); in __ocfs2_sync_dquot()
578 if (freeing && !OCFS2_DQUOT(dquot)->dq_use_count) { in __ocfs2_sync_dquot()
579 err = qtree_release_dquot(&info->dqi_gi, dquot); in __ocfs2_sync_dquot()
597 static int ocfs2_sync_dquot_helper(struct dquot *dquot, unsigned long type) in ocfs2_sync_dquot_helper() argument
600 struct super_block *sb = dquot->dq_sb; in ocfs2_sync_dquot_helper()
605 trace_ocfs2_sync_dquot_helper(from_kqid(&init_user_ns, dquot->dq_id), in ocfs2_sync_dquot_helper()
606 dquot->dq_id.type, in ocfs2_sync_dquot_helper()
608 if (type != dquot->dq_id.type) in ocfs2_sync_dquot_helper()
621 status = ocfs2_sync_dquot(dquot); in ocfs2_sync_dquot_helper()
625 status = ocfs2_local_write_dquot(dquot); in ocfs2_sync_dquot_helper()
660 static int ocfs2_write_dquot(struct dquot *dquot) in ocfs2_write_dquot() argument
663 struct ocfs2_super *osb = OCFS2_SB(dquot->dq_sb); in ocfs2_write_dquot()
666 trace_ocfs2_write_dquot(from_kqid(&init_user_ns, dquot->dq_id), in ocfs2_write_dquot()
667 dquot->dq_id.type); in ocfs2_write_dquot()
675 down_write(&sb_dqopt(dquot->dq_sb)->dqio_sem); in ocfs2_write_dquot()
676 status = ocfs2_local_write_dquot(dquot); in ocfs2_write_dquot()
677 up_write(&sb_dqopt(dquot->dq_sb)->dqio_sem); in ocfs2_write_dquot()
718 static int ocfs2_release_dquot(struct dquot *dquot) in ocfs2_release_dquot() argument
722 sb_dqinfo(dquot->dq_sb, dquot->dq_id.type)->dqi_priv; in ocfs2_release_dquot()
723 struct ocfs2_super *osb = OCFS2_SB(dquot->dq_sb); in ocfs2_release_dquot()
726 trace_ocfs2_release_dquot(from_kqid(&init_user_ns, dquot->dq_id), in ocfs2_release_dquot()
727 dquot->dq_id.type); in ocfs2_release_dquot()
729 mutex_lock(&dquot->dq_lock); in ocfs2_release_dquot()
731 if (dquot_is_busy(dquot)) in ocfs2_release_dquot()
740 dqgrab(dquot); in ocfs2_release_dquot()
742 if (llist_add(&OCFS2_DQUOT(dquot)->list, &osb->dquot_drop_list)) in ocfs2_release_dquot()
750 ocfs2_calc_qdel_credits(dquot->dq_sb, dquot->dq_id.type)); in ocfs2_release_dquot()
757 status = ocfs2_global_release_dquot(dquot); in ocfs2_release_dquot()
762 status = ocfs2_local_release_dquot(handle, dquot); in ocfs2_release_dquot()
774 dquot->dq_off = 0; in ocfs2_release_dquot()
775 clear_bit(DQ_ACTIVE_B, &dquot->dq_flags); in ocfs2_release_dquot()
781 mutex_unlock(&dquot->dq_lock); in ocfs2_release_dquot()
792 static int ocfs2_acquire_dquot(struct dquot *dquot) in ocfs2_acquire_dquot() argument
796 struct super_block *sb = dquot->dq_sb; in ocfs2_acquire_dquot()
798 int type = dquot->dq_id.type; in ocfs2_acquire_dquot()
804 trace_ocfs2_acquire_dquot(from_kqid(&init_user_ns, dquot->dq_id), in ocfs2_acquire_dquot()
806 mutex_lock(&dquot->dq_lock); in ocfs2_acquire_dquot()
821 status = qtree_read_dquot(&info->dqi_gi, dquot); in ocfs2_acquire_dquot()
826 OCFS2_DQUOT(dquot)->dq_use_count++; in ocfs2_acquire_dquot()
827 OCFS2_DQUOT(dquot)->dq_origspace = dquot->dq_dqb.dqb_curspace; in ocfs2_acquire_dquot()
828 OCFS2_DQUOT(dquot)->dq_originodes = dquot->dq_dqb.dqb_curinodes; in ocfs2_acquire_dquot()
829 if (!dquot->dq_off) { /* No real quota entry? */ in ocfs2_acquire_dquot()
852 status = qtree_write_dquot(&info->dqi_gi, dquot); in ocfs2_acquire_dquot()
866 status = ocfs2_create_local_dquot(dquot); in ocfs2_acquire_dquot()
869 set_bit(DQ_ACTIVE_B, &dquot->dq_flags); in ocfs2_acquire_dquot()
871 mutex_unlock(&dquot->dq_lock); in ocfs2_acquire_dquot()
908 static int ocfs2_mark_dquot_dirty(struct dquot *dquot) in ocfs2_mark_dquot_dirty() argument
918 struct super_block *sb = dquot->dq_sb; in ocfs2_mark_dquot_dirty()
919 int type = dquot->dq_id.type; in ocfs2_mark_dquot_dirty()
924 trace_ocfs2_mark_dquot_dirty(from_kqid(&init_user_ns, dquot->dq_id), in ocfs2_mark_dquot_dirty()
929 spin_lock(&dquot->dq_dqb_lock); in ocfs2_mark_dquot_dirty()
930 if (dquot->dq_flags & mask) in ocfs2_mark_dquot_dirty()
932 spin_unlock(&dquot->dq_dqb_lock); in ocfs2_mark_dquot_dirty()
936 status = ocfs2_write_dquot(dquot); in ocfs2_mark_dquot_dirty()
949 status = ocfs2_sync_dquot(dquot); in ocfs2_mark_dquot_dirty()
955 status = ocfs2_local_write_dquot(dquot); in ocfs2_mark_dquot_dirty()
993 static struct dquot *ocfs2_alloc_dquot(struct super_block *sb, int type) in ocfs2_alloc_dquot()
995 struct ocfs2_dquot *dquot = in ocfs2_alloc_dquot() local
998 if (!dquot) in ocfs2_alloc_dquot()
1000 return &dquot->dq_dquot; in ocfs2_alloc_dquot()
1003 static void ocfs2_destroy_dquot(struct dquot *dquot) in ocfs2_destroy_dquot() argument
1005 kmem_cache_free(ocfs2_dquot_cachep, dquot); in ocfs2_destroy_dquot()