aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs
diff options
context:
space:
mode:
authorLiu Bo <bo.li.liu@oracle.com>2013-12-29 08:44:50 -0500
committerChris Mason <clm@fb.com>2014-01-28 16:20:14 -0500
commit17504584f52af944960f1ad16752aa10a0755b3b (patch)
tree7428bce96d72e51705d9154b661e86a56236c7ac /fs/btrfs
parent1708cc5723cb775703b42a0ce8e521019c42dd67 (diff)
Btrfs: return free space to global_rsv as much as possible
@full is not protected within global_rsv.lock, so we may think global_rsv is already full but in fact it's not, so we miss the opportunity to return free space to global_rsv directly when we release other block_rsvs. Signed-off-by: Liu Bo <bo.li.liu@oracle.com> Signed-off-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.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 3d19dcc553aa..41fe80b9db47 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -4674,7 +4674,7 @@ void btrfs_block_rsv_release(struct btrfs_root *root,
4674 u64 num_bytes) 4674 u64 num_bytes)
4675{ 4675{
4676 struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv; 4676 struct btrfs_block_rsv *global_rsv = &root->fs_info->global_block_rsv;
4677 if (global_rsv->full || global_rsv == block_rsv || 4677 if (global_rsv == block_rsv ||
4678 block_rsv->space_info != global_rsv->space_info) 4678 block_rsv->space_info != global_rsv->space_info)
4679 global_rsv = NULL; 4679 global_rsv = NULL;
4680 block_rsv_release_bytes(root->fs_info, block_rsv, global_rsv, 4680 block_rsv_release_bytes(root->fs_info, block_rsv, global_rsv,