aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent-tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/extent-tree.c')
-rw-r--r--fs/btrfs/extent-tree.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 87d6666cd8e3..85d1ceb90273 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -7257,6 +7257,7 @@ static noinline int find_free_extent(struct btrfs_fs_info *fs_info,
7257 struct btrfs_block_group_cache *block_group = NULL; 7257 struct btrfs_block_group_cache *block_group = NULL;
7258 u64 search_start = 0; 7258 u64 search_start = 0;
7259 u64 max_extent_size = 0; 7259 u64 max_extent_size = 0;
7260 u64 max_free_space = 0;
7260 u64 empty_cluster = 0; 7261 u64 empty_cluster = 0;
7261 struct btrfs_space_info *space_info; 7262 struct btrfs_space_info *space_info;
7262 int loop = 0; 7263 int loop = 0;
@@ -7552,8 +7553,8 @@ unclustered_alloc:
7552 spin_lock(&ctl->tree_lock); 7553 spin_lock(&ctl->tree_lock);
7553 if (ctl->free_space < 7554 if (ctl->free_space <
7554 num_bytes + empty_cluster + empty_size) { 7555 num_bytes + empty_cluster + empty_size) {
7555 if (ctl->free_space > max_extent_size) 7556 max_free_space = max(max_free_space,
7556 max_extent_size = ctl->free_space; 7557 ctl->free_space);
7557 spin_unlock(&ctl->tree_lock); 7558 spin_unlock(&ctl->tree_lock);
7558 goto loop; 7559 goto loop;
7559 } 7560 }
@@ -7720,6 +7721,8 @@ loop:
7720 } 7721 }
7721out: 7722out:
7722 if (ret == -ENOSPC) { 7723 if (ret == -ENOSPC) {
7724 if (!max_extent_size)
7725 max_extent_size = max_free_space;
7723 spin_lock(&space_info->lock); 7726 spin_lock(&space_info->lock);
7724 space_info->max_extent_size = max_extent_size; 7727 space_info->max_extent_size = max_extent_size;
7725 spin_unlock(&space_info->lock); 7728 spin_unlock(&space_info->lock);