Lines Matching refs:dquot
252 /* Find space for dquot */
254 struct dquot *dquot, int *err)
286 mark_info_dirty(dquot->dq_sb, dquot->dq_id.type);
292 quota_error(dquot->dq_sb, "Can't remove block (%u) "
307 quota_error(dquot->dq_sb, "Data block full but it shouldn't");
314 quota_error(dquot->dq_sb, "Can't write quota data block %u",
318 dquot->dq_off = ((loff_t)blk << info->dqi_blocksize_bits) +
329 static int do_insert_tree(struct qtree_mem_dqinfo *info, struct dquot *dquot,
349 quota_error(dquot->dq_sb, "Can't read tree quota "
355 newblk = le32_to_cpu(ref[get_index(info, dquot->dq_id, depth)]);
356 ret = do_check_range(dquot->dq_sb, "block", newblk, 0,
365 quota_error(dquot->dq_sb, "Inserting already present "
368 dquot->dq_id, depth)]));
373 newblk = find_free_dqentry(info, dquot, &ret);
375 ret = do_insert_tree(info, dquot, &newblk, depth+1);
378 ref[get_index(info, dquot->dq_id, depth)] =
391 struct dquot *dquot)
397 quota_error(dquot->dq_sb, "Quota tree root isn't allocated!");
401 return do_insert_tree(info, dquot, &tmp, 0);
408 int qtree_write_dquot(struct qtree_mem_dqinfo *info, struct dquot *dquot)
410 int type = dquot->dq_id.type;
411 struct super_block *sb = dquot->dq_sb;
419 if (!dquot->dq_off) {
420 ret = dq_insert_tree(info, dquot);
428 spin_lock(&dquot->dq_dqb_lock);
429 info->dqi_ops->mem2disk_dqblk(ddquot, dquot);
430 spin_unlock(&dquot->dq_dqb_lock);
432 dquot->dq_off);
447 /* Free dquot entry in data block */
448 static int free_dqentry(struct qtree_mem_dqinfo *info, struct dquot *dquot,
457 if (dquot->dq_off >> info->dqi_blocksize_bits != blk) {
458 quota_error(dquot->dq_sb, "Quota structure has offset to "
460 (uint)(dquot->dq_off >> info->dqi_blocksize_bits));
466 quota_error(dquot->dq_sb, "Can't read quota data block %u",
480 quota_error(dquot->dq_sb, "Can't move quota data block "
486 (dquot->dq_off & ((1 << info->dqi_blocksize_bits) - 1)),
493 quota_error(dquot->dq_sb, "Can't insert quota "
500 quota_error(dquot->dq_sb, "Can't write quota "
506 dquot->dq_off = 0; /* Quota is now unattached */
512 /* Remove reference to dquot from tree */
513 static int remove_tree(struct qtree_mem_dqinfo *info, struct dquot *dquot,
525 quota_error(dquot->dq_sb, "Can't read quota data block %u",
529 newblk = le32_to_cpu(ref[get_index(info, dquot->dq_id, depth)]);
530 ret = do_check_range(dquot->dq_sb, "block", newblk, QT_TREEOFF,
536 ret = free_dqentry(info, dquot, newblk);
539 ret = remove_tree(info, dquot, &newblk, depth+1);
543 ref[get_index(info, dquot->dq_id, depth)] = cpu_to_le32(0);
555 quota_error(dquot->dq_sb,
565 /* Delete dquot from tree */
566 int qtree_delete_dquot(struct qtree_mem_dqinfo *info, struct dquot *dquot)
570 if (!dquot->dq_off) /* Even not allocated? */
572 return remove_tree(info, dquot, &tmp, 0);
578 struct dquot *dquot, uint blk)
589 quota_error(dquot->dq_sb, "Can't read quota tree "
595 if (info->dqi_ops->is_id(ddquot, dquot))
600 quota_error(dquot->dq_sb,
602 from_kqid(&init_user_ns, dquot->dq_id));
616 struct dquot *dquot, uint blk, int depth)
626 quota_error(dquot->dq_sb, "Can't read quota tree block %u",
631 blk = le32_to_cpu(ref[get_index(info, dquot->dq_id, depth)]);
634 ret = do_check_range(dquot->dq_sb, "block", blk, QT_TREEOFF,
640 ret = find_tree_dqentry(info, dquot, blk, depth+1);
642 ret = find_block_dqentry(info, dquot, blk);
650 struct dquot *dquot)
652 return find_tree_dqentry(info, dquot, QT_TREEOFF, 0);
655 int qtree_read_dquot(struct qtree_mem_dqinfo *info, struct dquot *dquot)
657 int type = dquot->dq_id.type;
658 struct super_block *sb = dquot->dq_sb;
665 if (!sb_dqopt(dquot->dq_sb)->files[type]) {
670 /* Do we know offset of the dquot entry in the quota file? */
671 if (!dquot->dq_off) {
672 offset = find_dqentry(info, dquot);
678 dquot->dq_id));
679 dquot->dq_off = 0;
680 set_bit(DQ_FAKE_B, &dquot->dq_flags);
681 memset(&dquot->dq_dqb, 0, sizeof(struct mem_dqblk));
685 dquot->dq_off = offset;
691 dquot->dq_off);
696 from_kqid(&init_user_ns, dquot->dq_id));
697 set_bit(DQ_FAKE_B, &dquot->dq_flags);
698 memset(&dquot->dq_dqb, 0, sizeof(struct mem_dqblk));
702 spin_lock(&dquot->dq_dqb_lock);
703 info->dqi_ops->disk2mem_dqblk(dquot, ddquot);
704 if (!dquot->dq_dqb.dqb_bhardlimit &&
705 !dquot->dq_dqb.dqb_bsoftlimit &&
706 !dquot->dq_dqb.dqb_ihardlimit &&
707 !dquot->dq_dqb.dqb_isoftlimit)
708 set_bit(DQ_FAKE_B, &dquot->dq_flags);
709 spin_unlock(&dquot->dq_dqb_lock);
717 /* Check whether dquot should not be deleted. We know we are
718 * the only one operating on dquot (thanks to dq_lock) */
719 int qtree_release_dquot(struct qtree_mem_dqinfo *info, struct dquot *dquot)
721 if (test_bit(DQ_FAKE_B, &dquot->dq_flags) &&
722 !(dquot->dq_dqb.dqb_curinodes | dquot->dq_dqb.dqb_curspace))
723 return qtree_delete_dquot(info, dquot);