aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs
diff options
context:
space:
mode:
authorDongsheng Yang <yangds.fnst@cn.fujitsu.com>2014-12-12 03:44:34 -0500
committerChris Mason <clm@fb.com>2015-04-13 10:52:46 -0400
commit804ca127fb93988c6a9d5f2bf4a8f1a780c9a2d0 (patch)
treeef99ed7680b2e4c47e4ae0687cc4fc6779e9c105 /fs/btrfs
parent4087cf24ae2af17f7dd9fd34e22fde816952d421 (diff)
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/btrfs')
-rw-r--r--fs/btrfs/extent-tree.c5
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:
5475 to_free = 0; 5475 to_free = 0;
5476 } 5476 }
5477 spin_unlock(&BTRFS_I(inode)->lock); 5477 spin_unlock(&BTRFS_I(inode)->lock);
5478 if (dropped) 5478 if (dropped) {
5479 if (root->fs_info->quota_enabled)
5480 btrfs_qgroup_free(root, dropped * root->nodesize);
5479 to_free += btrfs_calc_trans_metadata_size(root, dropped); 5481 to_free += btrfs_calc_trans_metadata_size(root, dropped);
5482 }
5480 5483
5481 if (to_free) { 5484 if (to_free) {
5482 btrfs_block_rsv_release(root, block_rsv, to_free); 5485 btrfs_block_rsv_release(root, block_rsv, to_free);