Lines Matching refs:dquot
289 static inline void insert_dquot_hash(struct dquot *dquot) in insert_dquot_hash() argument
292 head = dquot_hash + hashfn(dquot->dq_sb, dquot->dq_id); in insert_dquot_hash()
293 hlist_add_head(&dquot->dq_hash, head); in insert_dquot_hash()
296 static inline void remove_dquot_hash(struct dquot *dquot) in remove_dquot_hash() argument
298 hlist_del_init(&dquot->dq_hash); in remove_dquot_hash()
301 static struct dquot *find_dquot(unsigned int hashent, struct super_block *sb, in find_dquot()
304 struct dquot *dquot; in find_dquot() local
306 hlist_for_each_entry(dquot, dquot_hash+hashent, dq_hash) in find_dquot()
307 if (dquot->dq_sb == sb && qid_eq(dquot->dq_id, qid)) in find_dquot()
308 return dquot; in find_dquot()
314 static inline void put_dquot_last(struct dquot *dquot) in put_dquot_last() argument
316 list_add_tail(&dquot->dq_free, &free_dquots); in put_dquot_last()
320 static inline void put_releasing_dquots(struct dquot *dquot) in put_releasing_dquots() argument
322 list_add_tail(&dquot->dq_free, &releasing_dquots); in put_releasing_dquots()
323 set_bit(DQ_RELEASING_B, &dquot->dq_flags); in put_releasing_dquots()
326 static inline void remove_free_dquot(struct dquot *dquot) in remove_free_dquot() argument
328 if (list_empty(&dquot->dq_free)) in remove_free_dquot()
330 list_del_init(&dquot->dq_free); in remove_free_dquot()
331 if (!test_bit(DQ_RELEASING_B, &dquot->dq_flags)) in remove_free_dquot()
334 clear_bit(DQ_RELEASING_B, &dquot->dq_flags); in remove_free_dquot()
337 static inline void put_inuse(struct dquot *dquot) in put_inuse() argument
341 list_add_tail(&dquot->dq_inuse, &inuse_list); in put_inuse()
345 static inline void remove_inuse(struct dquot *dquot) in remove_inuse() argument
348 list_del(&dquot->dq_inuse); in remove_inuse()
354 static void wait_on_dquot(struct dquot *dquot) in wait_on_dquot() argument
356 mutex_lock(&dquot->dq_lock); in wait_on_dquot()
357 mutex_unlock(&dquot->dq_lock); in wait_on_dquot()
360 static inline int dquot_active(struct dquot *dquot) in dquot_active() argument
362 return test_bit(DQ_ACTIVE_B, &dquot->dq_flags); in dquot_active()
365 static inline int dquot_dirty(struct dquot *dquot) in dquot_dirty() argument
367 return test_bit(DQ_MOD_B, &dquot->dq_flags); in dquot_dirty()
370 static inline int mark_dquot_dirty(struct dquot *dquot) in mark_dquot_dirty() argument
372 return dquot->dq_sb->dq_op->mark_dirty(dquot); in mark_dquot_dirty()
376 int dquot_mark_dquot_dirty(struct dquot *dquot) in dquot_mark_dquot_dirty() argument
380 if (!dquot_active(dquot)) in dquot_mark_dquot_dirty()
383 if (sb_dqopt(dquot->dq_sb)->flags & DQUOT_NOLIST_DIRTY) in dquot_mark_dquot_dirty()
384 return test_and_set_bit(DQ_MOD_B, &dquot->dq_flags); in dquot_mark_dquot_dirty()
387 if (dquot_dirty(dquot)) in dquot_mark_dquot_dirty()
391 if (!test_and_set_bit(DQ_MOD_B, &dquot->dq_flags)) { in dquot_mark_dquot_dirty()
392 list_add(&dquot->dq_dirty, &sb_dqopt(dquot->dq_sb)-> in dquot_mark_dquot_dirty()
393 info[dquot->dq_id.type].dqi_dirty_list); in dquot_mark_dquot_dirty()
402 static inline int mark_all_dquot_dirty(struct dquot * const *dquot) in mark_all_dquot_dirty() argument
408 if (dquot[cnt]) in mark_all_dquot_dirty()
410 ret = mark_dquot_dirty(dquot[cnt]); in mark_all_dquot_dirty()
417 static inline void dqput_all(struct dquot **dquot) in dqput_all() argument
422 dqput(dquot[cnt]); in dqput_all()
425 static inline int clear_dquot_dirty(struct dquot *dquot) in clear_dquot_dirty() argument
427 if (sb_dqopt(dquot->dq_sb)->flags & DQUOT_NOLIST_DIRTY) in clear_dquot_dirty()
428 return test_and_clear_bit(DQ_MOD_B, &dquot->dq_flags); in clear_dquot_dirty()
431 if (!test_and_clear_bit(DQ_MOD_B, &dquot->dq_flags)) { in clear_dquot_dirty()
435 list_del_init(&dquot->dq_dirty); in clear_dquot_dirty()
452 int dquot_acquire(struct dquot *dquot) in dquot_acquire() argument
456 struct quota_info *dqopt = sb_dqopt(dquot->dq_sb); in dquot_acquire()
458 mutex_lock(&dquot->dq_lock); in dquot_acquire()
460 if (!test_bit(DQ_READ_B, &dquot->dq_flags)) { in dquot_acquire()
461 ret = dqopt->ops[dquot->dq_id.type]->read_dqblk(dquot); in dquot_acquire()
467 set_bit(DQ_READ_B, &dquot->dq_flags); in dquot_acquire()
469 if (!dquot_active(dquot) && !dquot->dq_off) { in dquot_acquire()
470 ret = dqopt->ops[dquot->dq_id.type]->commit_dqblk(dquot); in dquot_acquire()
472 if (info_dirty(&dqopt->info[dquot->dq_id.type])) { in dquot_acquire()
473 ret2 = dqopt->ops[dquot->dq_id.type]->write_file_info( in dquot_acquire()
474 dquot->dq_sb, dquot->dq_id.type); in dquot_acquire()
488 set_bit(DQ_ACTIVE_B, &dquot->dq_flags); in dquot_acquire()
491 mutex_unlock(&dquot->dq_lock); in dquot_acquire()
499 int dquot_commit(struct dquot *dquot) in dquot_commit() argument
503 struct quota_info *dqopt = sb_dqopt(dquot->dq_sb); in dquot_commit()
505 mutex_lock(&dquot->dq_lock); in dquot_commit()
507 if (!clear_dquot_dirty(dquot)) in dquot_commit()
511 if (dquot_active(dquot)) in dquot_commit()
512 ret = dqopt->ops[dquot->dq_id.type]->commit_dqblk(dquot); in dquot_commit()
517 mutex_unlock(&dquot->dq_lock); in dquot_commit()
525 int dquot_release(struct dquot *dquot) in dquot_release() argument
529 struct quota_info *dqopt = sb_dqopt(dquot->dq_sb); in dquot_release()
531 mutex_lock(&dquot->dq_lock); in dquot_release()
534 if (dquot_is_busy(dquot)) in dquot_release()
536 if (dqopt->ops[dquot->dq_id.type]->release_dqblk) { in dquot_release()
537 ret = dqopt->ops[dquot->dq_id.type]->release_dqblk(dquot); in dquot_release()
539 if (info_dirty(&dqopt->info[dquot->dq_id.type])) { in dquot_release()
540 ret2 = dqopt->ops[dquot->dq_id.type]->write_file_info( in dquot_release()
541 dquot->dq_sb, dquot->dq_id.type); in dquot_release()
546 clear_bit(DQ_ACTIVE_B, &dquot->dq_flags); in dquot_release()
549 mutex_unlock(&dquot->dq_lock); in dquot_release()
554 void dquot_destroy(struct dquot *dquot) in dquot_destroy() argument
556 kmem_cache_free(dquot_cachep, dquot); in dquot_destroy()
560 static inline void do_destroy_dquot(struct dquot *dquot) in do_destroy_dquot() argument
562 dquot->dq_sb->dq_op->destroy_dquot(dquot); in do_destroy_dquot()
573 struct dquot *dquot, *tmp; in invalidate_dquots() local
579 list_for_each_entry_safe(dquot, tmp, &inuse_list, dq_inuse) { in invalidate_dquots()
580 if (dquot->dq_sb != sb) in invalidate_dquots()
582 if (dquot->dq_id.type != type) in invalidate_dquots()
585 if (atomic_read(&dquot->dq_count)) { in invalidate_dquots()
586 atomic_inc(&dquot->dq_count); in invalidate_dquots()
597 atomic_read(&dquot->dq_count) == 1); in invalidate_dquots()
598 dqput(dquot); in invalidate_dquots()
609 if (test_bit(DQ_RELEASING_B, &dquot->dq_flags)) { in invalidate_dquots()
617 remove_dquot_hash(dquot); in invalidate_dquots()
618 remove_free_dquot(dquot); in invalidate_dquots()
619 remove_inuse(dquot); in invalidate_dquots()
620 do_destroy_dquot(dquot); in invalidate_dquots()
627 int (*fn)(struct dquot *dquot, unsigned long priv), in dquot_scan_active() argument
630 struct dquot *dquot, *old_dquot = NULL; in dquot_scan_active() local
636 list_for_each_entry(dquot, &inuse_list, dq_inuse) { in dquot_scan_active()
637 if (!dquot_active(dquot)) in dquot_scan_active()
639 if (dquot->dq_sb != sb) in dquot_scan_active()
642 atomic_inc(&dquot->dq_count); in dquot_scan_active()
645 old_dquot = dquot; in dquot_scan_active()
651 wait_on_dquot(dquot); in dquot_scan_active()
652 if (dquot_active(dquot)) { in dquot_scan_active()
653 ret = fn(dquot, priv); in dquot_scan_active()
668 static inline int dquot_write_dquot(struct dquot *dquot) in dquot_write_dquot() argument
670 int ret = dquot->dq_sb->dq_op->write_dquot(dquot); in dquot_write_dquot()
672 quota_error(dquot->dq_sb, "Can't write quota structure " in dquot_write_dquot()
675 clear_dquot_dirty(dquot); in dquot_write_dquot()
684 struct dquot *dquot; in dquot_writeback_dquots() local
700 dquot = list_first_entry(&dirty, struct dquot, in dquot_writeback_dquots()
703 WARN_ON(!dquot_active(dquot)); in dquot_writeback_dquots()
705 if (test_bit(DQ_RELEASING_B, &dquot->dq_flags)) { in dquot_writeback_dquots()
715 dqgrab(dquot); in dquot_writeback_dquots()
717 err = dquot_write_dquot(dquot); in dquot_writeback_dquots()
720 dqput(dquot); in dquot_writeback_dquots()
782 struct dquot *dquot; in dqcache_shrink_scan() local
787 dquot = list_first_entry(&free_dquots, struct dquot, dq_free); in dqcache_shrink_scan()
788 remove_dquot_hash(dquot); in dqcache_shrink_scan()
789 remove_free_dquot(dquot); in dqcache_shrink_scan()
790 remove_inuse(dquot); in dqcache_shrink_scan()
791 do_destroy_dquot(dquot); in dqcache_shrink_scan()
817 struct dquot *dquot; in quota_release_workfn() local
829 dquot = list_first_entry(&rls_head, struct dquot, dq_free); in quota_release_workfn()
830 WARN_ON_ONCE(atomic_read(&dquot->dq_count)); in quota_release_workfn()
836 if (dquot_dirty(dquot)) { in quota_release_workfn()
839 dquot_write_dquot(dquot); in quota_release_workfn()
842 if (dquot_active(dquot)) { in quota_release_workfn()
844 dquot->dq_sb->dq_op->release_dquot(dquot); in quota_release_workfn()
848 remove_free_dquot(dquot); in quota_release_workfn()
849 put_dquot_last(dquot); in quota_release_workfn()
857 void dqput(struct dquot *dquot) in dqput() argument
859 if (!dquot) in dqput()
862 if (!atomic_read(&dquot->dq_count)) { in dqput()
863 quota_error(dquot->dq_sb, "trying to free free dquot of %s %d", in dqput()
864 quotatypes[dquot->dq_id.type], in dqput()
865 from_kqid(&init_user_ns, dquot->dq_id)); in dqput()
872 if (atomic_read(&dquot->dq_count) > 1) { in dqput()
874 atomic_dec(&dquot->dq_count); in dqput()
876 if (!sb_has_quota_active(dquot->dq_sb, dquot->dq_id.type) && in dqput()
877 atomic_read(&dquot->dq_count) == 1) in dqput()
886 BUG_ON(!list_empty(&dquot->dq_free)); in dqput()
888 put_releasing_dquots(dquot); in dqput()
889 atomic_dec(&dquot->dq_count); in dqput()
895 struct dquot *dquot_alloc(struct super_block *sb, int type) in dquot_alloc()
901 static struct dquot *get_empty_dquot(struct super_block *sb, int type) in get_empty_dquot()
903 struct dquot *dquot; in get_empty_dquot() local
905 dquot = sb->dq_op->alloc_dquot(sb, type); in get_empty_dquot()
906 if(!dquot) in get_empty_dquot()
909 mutex_init(&dquot->dq_lock); in get_empty_dquot()
910 INIT_LIST_HEAD(&dquot->dq_free); in get_empty_dquot()
911 INIT_LIST_HEAD(&dquot->dq_inuse); in get_empty_dquot()
912 INIT_HLIST_NODE(&dquot->dq_hash); in get_empty_dquot()
913 INIT_LIST_HEAD(&dquot->dq_dirty); in get_empty_dquot()
914 dquot->dq_sb = sb; in get_empty_dquot()
915 dquot->dq_id = make_kqid_invalid(type); in get_empty_dquot()
916 atomic_set(&dquot->dq_count, 1); in get_empty_dquot()
917 spin_lock_init(&dquot->dq_dqb_lock); in get_empty_dquot()
919 return dquot; in get_empty_dquot()
930 struct dquot *dqget(struct super_block *sb, struct kqid qid) in dqget()
933 struct dquot *dquot, *empty = NULL; in dqget() local
946 dquot = ERR_PTR(-ESRCH); in dqget()
951 dquot = find_dquot(hashent, sb, qid); in dqget()
952 if (!dquot) { in dqget()
960 dquot = empty; in dqget()
962 dquot->dq_id = qid; in dqget()
964 put_inuse(dquot); in dqget()
966 insert_dquot_hash(dquot); in dqget()
970 if (!atomic_read(&dquot->dq_count)) in dqget()
971 remove_free_dquot(dquot); in dqget()
972 atomic_inc(&dquot->dq_count); in dqget()
979 wait_on_dquot(dquot); in dqget()
981 if (!dquot_active(dquot)) { in dqget()
984 err = sb->dq_op->acquire_dquot(dquot); in dqget()
986 dqput(dquot); in dqget()
987 dquot = ERR_PTR(err); in dqget()
997 BUG_ON(!dquot->dq_sb); /* Has somebody invalidated entry under us? */ in dqget()
1003 return dquot; in dqget()
1007 static inline struct dquot **i_dquot(struct inode *inode) in i_dquot()
1014 struct dquot * const *dquots; in dqinit_needed()
1094 struct dquot **dquots = i_dquot(inode); in remove_inode_dquot_ref()
1095 struct dquot *dquot = dquots[type]; in remove_inode_dquot_ref() local
1097 if (!dquot) in remove_inode_dquot_ref()
1101 if (list_empty(&dquot->dq_free)) { in remove_inode_dquot_ref()
1107 list_add(&dquot->dq_free, tofree_head); in remove_inode_dquot_ref()
1114 dqput(dquot); in remove_inode_dquot_ref()
1126 struct dquot *dquot; in put_dquot_list() local
1130 dquot = list_entry(act_head, struct dquot, dq_free); in put_dquot_list()
1133 list_del_init(&dquot->dq_free); in put_dquot_list()
1134 dqput(dquot); in put_dquot_list()
1187 void dquot_free_reserved_space(struct dquot *dquot, qsize_t number) in dquot_free_reserved_space() argument
1189 if (dquot->dq_dqb.dqb_rsvspace >= number) in dquot_free_reserved_space()
1190 dquot->dq_dqb.dqb_rsvspace -= number; in dquot_free_reserved_space()
1193 dquot->dq_dqb.dqb_rsvspace = 0; in dquot_free_reserved_space()
1195 if (dquot->dq_dqb.dqb_curspace + dquot->dq_dqb.dqb_rsvspace <= in dquot_free_reserved_space()
1196 dquot->dq_dqb.dqb_bsoftlimit) in dquot_free_reserved_space()
1197 dquot->dq_dqb.dqb_btime = (time64_t) 0; in dquot_free_reserved_space()
1198 clear_bit(DQ_BLKS_B, &dquot->dq_flags); in dquot_free_reserved_space()
1201 static void dquot_decr_inodes(struct dquot *dquot, qsize_t number) in dquot_decr_inodes() argument
1203 if (sb_dqopt(dquot->dq_sb)->flags & DQUOT_NEGATIVE_USAGE || in dquot_decr_inodes()
1204 dquot->dq_dqb.dqb_curinodes >= number) in dquot_decr_inodes()
1205 dquot->dq_dqb.dqb_curinodes -= number; in dquot_decr_inodes()
1207 dquot->dq_dqb.dqb_curinodes = 0; in dquot_decr_inodes()
1208 if (dquot->dq_dqb.dqb_curinodes <= dquot->dq_dqb.dqb_isoftlimit) in dquot_decr_inodes()
1209 dquot->dq_dqb.dqb_itime = (time64_t) 0; in dquot_decr_inodes()
1210 clear_bit(DQ_INODES_B, &dquot->dq_flags); in dquot_decr_inodes()
1213 static void dquot_decr_space(struct dquot *dquot, qsize_t number) in dquot_decr_space() argument
1215 if (sb_dqopt(dquot->dq_sb)->flags & DQUOT_NEGATIVE_USAGE || in dquot_decr_space()
1216 dquot->dq_dqb.dqb_curspace >= number) in dquot_decr_space()
1217 dquot->dq_dqb.dqb_curspace -= number; in dquot_decr_space()
1219 dquot->dq_dqb.dqb_curspace = 0; in dquot_decr_space()
1220 if (dquot->dq_dqb.dqb_curspace + dquot->dq_dqb.dqb_rsvspace <= in dquot_decr_space()
1221 dquot->dq_dqb.dqb_bsoftlimit) in dquot_decr_space()
1222 dquot->dq_dqb.dqb_btime = (time64_t) 0; in dquot_decr_space()
1223 clear_bit(DQ_BLKS_B, &dquot->dq_flags); in dquot_decr_space()
1232 static int warning_issued(struct dquot *dquot, const int warntype) in warning_issued() argument
1241 return test_and_set_bit(flag, &dquot->dq_flags); in warning_issued()
1310 static void prepare_warning(struct dquot_warn *warn, struct dquot *dquot, in prepare_warning() argument
1313 if (warning_issued(dquot, warntype)) in prepare_warning()
1316 warn->w_sb = dquot->dq_sb; in prepare_warning()
1317 warn->w_dq_id = dquot->dq_id; in prepare_warning()
1340 static int ignore_hardlimit(struct dquot *dquot) in ignore_hardlimit() argument
1342 struct mem_dqinfo *info = &sb_dqopt(dquot->dq_sb)->info[dquot->dq_id.type]; in ignore_hardlimit()
1349 static int dquot_add_inodes(struct dquot *dquot, qsize_t inodes, in dquot_add_inodes() argument
1355 spin_lock(&dquot->dq_dqb_lock); in dquot_add_inodes()
1356 newinodes = dquot->dq_dqb.dqb_curinodes + inodes; in dquot_add_inodes()
1357 if (!sb_has_quota_limits_enabled(dquot->dq_sb, dquot->dq_id.type) || in dquot_add_inodes()
1358 test_bit(DQ_FAKE_B, &dquot->dq_flags)) in dquot_add_inodes()
1361 if (dquot->dq_dqb.dqb_ihardlimit && in dquot_add_inodes()
1362 newinodes > dquot->dq_dqb.dqb_ihardlimit && in dquot_add_inodes()
1363 !ignore_hardlimit(dquot)) { in dquot_add_inodes()
1364 prepare_warning(warn, dquot, QUOTA_NL_IHARDWARN); in dquot_add_inodes()
1369 if (dquot->dq_dqb.dqb_isoftlimit && in dquot_add_inodes()
1370 newinodes > dquot->dq_dqb.dqb_isoftlimit && in dquot_add_inodes()
1371 dquot->dq_dqb.dqb_itime && in dquot_add_inodes()
1372 ktime_get_real_seconds() >= dquot->dq_dqb.dqb_itime && in dquot_add_inodes()
1373 !ignore_hardlimit(dquot)) { in dquot_add_inodes()
1374 prepare_warning(warn, dquot, QUOTA_NL_ISOFTLONGWARN); in dquot_add_inodes()
1379 if (dquot->dq_dqb.dqb_isoftlimit && in dquot_add_inodes()
1380 newinodes > dquot->dq_dqb.dqb_isoftlimit && in dquot_add_inodes()
1381 dquot->dq_dqb.dqb_itime == 0) { in dquot_add_inodes()
1382 prepare_warning(warn, dquot, QUOTA_NL_ISOFTWARN); in dquot_add_inodes()
1383 dquot->dq_dqb.dqb_itime = ktime_get_real_seconds() + in dquot_add_inodes()
1384 sb_dqopt(dquot->dq_sb)->info[dquot->dq_id.type].dqi_igrace; in dquot_add_inodes()
1387 dquot->dq_dqb.dqb_curinodes = newinodes; in dquot_add_inodes()
1390 spin_unlock(&dquot->dq_dqb_lock); in dquot_add_inodes()
1394 static int dquot_add_space(struct dquot *dquot, qsize_t space, in dquot_add_space() argument
1399 struct super_block *sb = dquot->dq_sb; in dquot_add_space()
1402 spin_lock(&dquot->dq_dqb_lock); in dquot_add_space()
1403 if (!sb_has_quota_limits_enabled(sb, dquot->dq_id.type) || in dquot_add_space()
1404 test_bit(DQ_FAKE_B, &dquot->dq_flags)) in dquot_add_space()
1407 tspace = dquot->dq_dqb.dqb_curspace + dquot->dq_dqb.dqb_rsvspace in dquot_add_space()
1410 if (dquot->dq_dqb.dqb_bhardlimit && in dquot_add_space()
1411 tspace > dquot->dq_dqb.dqb_bhardlimit && in dquot_add_space()
1412 !ignore_hardlimit(dquot)) { in dquot_add_space()
1414 prepare_warning(warn, dquot, QUOTA_NL_BHARDWARN); in dquot_add_space()
1419 if (dquot->dq_dqb.dqb_bsoftlimit && in dquot_add_space()
1420 tspace > dquot->dq_dqb.dqb_bsoftlimit && in dquot_add_space()
1421 dquot->dq_dqb.dqb_btime && in dquot_add_space()
1422 ktime_get_real_seconds() >= dquot->dq_dqb.dqb_btime && in dquot_add_space()
1423 !ignore_hardlimit(dquot)) { in dquot_add_space()
1425 prepare_warning(warn, dquot, QUOTA_NL_BSOFTLONGWARN); in dquot_add_space()
1430 if (dquot->dq_dqb.dqb_bsoftlimit && in dquot_add_space()
1431 tspace > dquot->dq_dqb.dqb_bsoftlimit && in dquot_add_space()
1432 dquot->dq_dqb.dqb_btime == 0) { in dquot_add_space()
1434 prepare_warning(warn, dquot, QUOTA_NL_BSOFTWARN); in dquot_add_space()
1435 dquot->dq_dqb.dqb_btime = ktime_get_real_seconds() + in dquot_add_space()
1436 sb_dqopt(sb)->info[dquot->dq_id.type].dqi_bgrace; in dquot_add_space()
1455 dquot->dq_dqb.dqb_rsvspace += rsv_space; in dquot_add_space()
1456 dquot->dq_dqb.dqb_curspace += space; in dquot_add_space()
1458 spin_unlock(&dquot->dq_dqb_lock); in dquot_add_space()
1462 static int info_idq_free(struct dquot *dquot, qsize_t inodes) in info_idq_free() argument
1466 if (test_bit(DQ_FAKE_B, &dquot->dq_flags) || in info_idq_free()
1467 dquot->dq_dqb.dqb_curinodes <= dquot->dq_dqb.dqb_isoftlimit || in info_idq_free()
1468 !sb_has_quota_limits_enabled(dquot->dq_sb, dquot->dq_id.type)) in info_idq_free()
1471 newinodes = dquot->dq_dqb.dqb_curinodes - inodes; in info_idq_free()
1472 if (newinodes <= dquot->dq_dqb.dqb_isoftlimit) in info_idq_free()
1474 if (dquot->dq_dqb.dqb_curinodes >= dquot->dq_dqb.dqb_ihardlimit && in info_idq_free()
1475 newinodes < dquot->dq_dqb.dqb_ihardlimit) in info_idq_free()
1480 static int info_bdq_free(struct dquot *dquot, qsize_t space) in info_bdq_free() argument
1484 tspace = dquot->dq_dqb.dqb_curspace + dquot->dq_dqb.dqb_rsvspace; in info_bdq_free()
1486 if (test_bit(DQ_FAKE_B, &dquot->dq_flags) || in info_bdq_free()
1487 tspace <= dquot->dq_dqb.dqb_bsoftlimit) in info_bdq_free()
1490 if (tspace - space <= dquot->dq_dqb.dqb_bsoftlimit) in info_bdq_free()
1492 if (tspace >= dquot->dq_dqb.dqb_bhardlimit && in info_bdq_free()
1493 tspace - space < dquot->dq_dqb.dqb_bhardlimit) in info_bdq_free()
1516 struct dquot **dquots, *got[MAXQUOTAS] = {}; in __dquot_initialize()
1531 struct dquot *dquot; in __dquot_initialize() local
1562 dquot = dqget(sb, qid); in __dquot_initialize()
1563 if (IS_ERR(dquot)) { in __dquot_initialize()
1565 if (PTR_ERR(dquot) != -ESRCH) { in __dquot_initialize()
1566 ret = PTR_ERR(dquot); in __dquot_initialize()
1569 dquot = NULL; in __dquot_initialize()
1571 got[cnt] = dquot; in __dquot_initialize()
1626 struct dquot **dquots; in dquot_initialize_needed()
1651 struct dquot **dquots = i_dquot(inode); in __dquot_drop()
1652 struct dquot *put[MAXQUOTAS]; in __dquot_drop()
1665 struct dquot * const *dquots; in dquot_drop()
1738 struct dquot **dquots; in __dquot_alloc_space()
1808 struct dquot * const *dquots; in dquot_alloc_inode()
1850 struct dquot **dquots; in dquot_claim_space_nodirty()
1867 struct dquot *dquot = dquots[cnt]; in dquot_claim_space_nodirty() local
1869 spin_lock(&dquot->dq_dqb_lock); in dquot_claim_space_nodirty()
1870 if (WARN_ON_ONCE(dquot->dq_dqb.dqb_rsvspace < number)) in dquot_claim_space_nodirty()
1871 number = dquot->dq_dqb.dqb_rsvspace; in dquot_claim_space_nodirty()
1872 dquot->dq_dqb.dqb_curspace += number; in dquot_claim_space_nodirty()
1873 dquot->dq_dqb.dqb_rsvspace -= number; in dquot_claim_space_nodirty()
1874 spin_unlock(&dquot->dq_dqb_lock); in dquot_claim_space_nodirty()
1892 struct dquot **dquots; in dquot_reclaim_space_nodirty()
1909 struct dquot *dquot = dquots[cnt]; in dquot_reclaim_space_nodirty() local
1911 spin_lock(&dquot->dq_dqb_lock); in dquot_reclaim_space_nodirty()
1912 if (WARN_ON_ONCE(dquot->dq_dqb.dqb_curspace < number)) in dquot_reclaim_space_nodirty()
1913 number = dquot->dq_dqb.dqb_curspace; in dquot_reclaim_space_nodirty()
1914 dquot->dq_dqb.dqb_rsvspace += number; in dquot_reclaim_space_nodirty()
1915 dquot->dq_dqb.dqb_curspace -= number; in dquot_reclaim_space_nodirty()
1916 spin_unlock(&dquot->dq_dqb_lock); in dquot_reclaim_space_nodirty()
1936 struct dquot **dquots; in __dquot_free_space()
1991 struct dquot * const *dquots; in dquot_free_inode()
2032 int __dquot_transfer(struct inode *inode, struct dquot **transfer_to) in __dquot_transfer()
2037 struct dquot *transfer_from[MAXQUOTAS] = {}; in __dquot_transfer()
2161 struct dquot *transfer_to[MAXQUOTAS] = {}; in dquot_transfer()
2162 struct dquot *dquot; in dquot_transfer() local
2173 dquot = dqget(sb, make_kqid_uid(kuid)); in dquot_transfer()
2174 if (IS_ERR(dquot)) { in dquot_transfer()
2175 if (PTR_ERR(dquot) != -ESRCH) { in dquot_transfer()
2176 ret = PTR_ERR(dquot); in dquot_transfer()
2179 dquot = NULL; in dquot_transfer()
2181 transfer_to[USRQUOTA] = dquot; in dquot_transfer()
2187 dquot = dqget(sb, make_kqid_gid(kgid)); in dquot_transfer()
2188 if (IS_ERR(dquot)) { in dquot_transfer()
2189 if (PTR_ERR(dquot) != -ESRCH) { in dquot_transfer()
2190 ret = PTR_ERR(dquot); in dquot_transfer()
2193 dquot = NULL; in dquot_transfer()
2195 transfer_to[GRPQUOTA] = dquot; in dquot_transfer()
2700 static void do_get_dqblk(struct dquot *dquot, struct qc_dqblk *di) in do_get_dqblk() argument
2702 struct mem_dqblk *dm = &dquot->dq_dqb; in do_get_dqblk()
2705 spin_lock(&dquot->dq_dqb_lock); in do_get_dqblk()
2714 spin_unlock(&dquot->dq_dqb_lock); in do_get_dqblk()
2720 struct dquot *dquot; in dquot_get_dqblk() local
2722 dquot = dqget(sb, qid); in dquot_get_dqblk()
2723 if (IS_ERR(dquot)) in dquot_get_dqblk()
2724 return PTR_ERR(dquot); in dquot_get_dqblk()
2725 do_get_dqblk(dquot, di); in dquot_get_dqblk()
2726 dqput(dquot); in dquot_get_dqblk()
2735 struct dquot *dquot; in dquot_get_next_dqblk() local
2743 dquot = dqget(sb, *qid); in dquot_get_next_dqblk()
2744 if (IS_ERR(dquot)) in dquot_get_next_dqblk()
2745 return PTR_ERR(dquot); in dquot_get_next_dqblk()
2746 do_get_dqblk(dquot, di); in dquot_get_next_dqblk()
2747 dqput(dquot); in dquot_get_next_dqblk()
2759 static int do_set_dqblk(struct dquot *dquot, struct qc_dqblk *di) in do_set_dqblk() argument
2761 struct mem_dqblk *dm = &dquot->dq_dqb; in do_set_dqblk()
2763 struct mem_dqinfo *dqi = &sb_dqopt(dquot->dq_sb)->info[dquot->dq_id.type]; in do_set_dqblk()
2778 spin_lock(&dquot->dq_dqb_lock); in do_set_dqblk()
2782 set_bit(DQ_LASTSET_B + QIF_SPACE_B, &dquot->dq_flags); in do_set_dqblk()
2791 set_bit(DQ_LASTSET_B + QIF_BLIMITS_B, &dquot->dq_flags); in do_set_dqblk()
2797 set_bit(DQ_LASTSET_B + QIF_INODES_B, &dquot->dq_flags); in do_set_dqblk()
2806 set_bit(DQ_LASTSET_B + QIF_ILIMITS_B, &dquot->dq_flags); in do_set_dqblk()
2812 set_bit(DQ_LASTSET_B + QIF_BTIME_B, &dquot->dq_flags); in do_set_dqblk()
2818 set_bit(DQ_LASTSET_B + QIF_ITIME_B, &dquot->dq_flags); in do_set_dqblk()
2825 clear_bit(DQ_BLKS_B, &dquot->dq_flags); in do_set_dqblk()
2834 clear_bit(DQ_INODES_B, &dquot->dq_flags); in do_set_dqblk()
2841 clear_bit(DQ_FAKE_B, &dquot->dq_flags); in do_set_dqblk()
2843 set_bit(DQ_FAKE_B, &dquot->dq_flags); in do_set_dqblk()
2844 spin_unlock(&dquot->dq_dqb_lock); in do_set_dqblk()
2845 mark_dquot_dirty(dquot); in do_set_dqblk()
2853 struct dquot *dquot; in dquot_set_dqblk() local
2856 dquot = dqget(sb, qid); in dquot_set_dqblk()
2857 if (IS_ERR(dquot)) { in dquot_set_dqblk()
2858 rc = PTR_ERR(dquot); in dquot_set_dqblk()
2861 rc = do_set_dqblk(dquot, di); in dquot_set_dqblk()
2862 dqput(dquot); in dquot_set_dqblk()
3064 sizeof(struct dquot), sizeof(unsigned long) * 4, in dquot_init()