diff options
author | Dongsheng Yang <yangds.fnst@cn.fujitsu.com> | 2014-12-12 09:44:34 +0100 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2015-04-13 16:52:46 +0200 |
commit | 804ca127fb93988c6a9d5f2bf4a8f1a780c9a2d0 (patch) | |
tree | ef99ed7680b2e4c47e4ae0687cc4fc6779e9c105 /fs | |
parent | Btrfs: qgroup: cleanup, remove an unsued parameter in btrfs_create_qgroup(). (diff) | |
download | linux-804ca127fb93988c6a9d5f2bf4a8f1a780c9a2d0.tar.xz linux-804ca127fb93988c6a9d5f2bf4a8f1a780c9a2d0.zip |
Btrfs: qgroup: free reserved in exceeding quota.
When we exceed quota limit in writing, we will free
some reserved extent when we need to drop but not free
account in qgroup. It means, each time we exceed quota
in writing, there will be some remain space in qg->reserved
we can not use any more. If things go on like this, the
all space will be ate up.
Signed-off-by: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
Reviewed-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/extent-tree.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 2713dcbc70f7..695d5110e020 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -5475,8 +5475,11 @@ out_fail: to_free = 0; } spin_unlock(&BTRFS_I(inode)->lock); - if (dropped) + if (dropped) { + if (root->fs_info->quota_enabled) + btrfs_qgroup_free(root, dropped * root->nodesize); to_free += btrfs_calc_trans_metadata_size(root, dropped); + } if (to_free) { btrfs_block_rsv_release(root, block_rsv, to_free); |