From: Wang Shilong Date: Mon, 15 Apr 2013 12:56:49 +0000 (+0000) Subject: Btrfs: fix confusing edquot happening case X-Git-Tag: v4.0~3720^2~138 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b4fcd6be6bbd702ae1a6545c9b413681850a9814;p=platform%2Fkernel%2Flinux-amlogic.git Btrfs: fix confusing edquot happening case Step to reproduce: mkfs.btrfs mount dd if=/dev/zero of=//data bs=1M count=10 sync btrfs quota enable btrfs qgroup create 0/5 btrfs qgroup limit 5M 0/5 rm -f //data sync btrfs qgroup show dd if=/dev/zero of=data bs=1M count=1 >From the perspective of users, qgroup's referenced or exclusive is negative,but user can not continue to write data! a workaround way is to cast u64 to s64 when doing qgroup reservation. Signed-off-by: Wang Shilong Reviewed-by: Arne Jansen Signed-off-by: Josef Bacik --- diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index e089fc1..4beea04 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -1616,14 +1616,14 @@ int btrfs_qgroup_reserve(struct btrfs_root *root, u64 num_bytes) qg = (struct btrfs_qgroup *)(uintptr_t)unode->aux; if ((qg->lim_flags & BTRFS_QGROUP_LIMIT_MAX_RFER) && - qg->reserved + qg->rfer + num_bytes > + qg->reserved + (s64)qg->rfer + num_bytes > qg->max_rfer) { ret = -EDQUOT; goto out; } if ((qg->lim_flags & BTRFS_QGROUP_LIMIT_MAX_EXCL) && - qg->reserved + qg->excl + num_bytes > + qg->reserved + (s64)qg->excl + num_bytes > qg->max_excl) { ret = -EDQUOT; goto out;