lkml.org 
[lkml]   [2018]   [Nov]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 214/222] btrfs: dont use ctl->free_space for max_extent_size
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Josef Bacik <jbacik@fb.com>

    commit fb5c39d7a887108087de6ff93d3f326b01b4ef41 upstream.

    max_extent_size is supposed to be the largest contiguous range for the
    space info, and ctl->free_space is the total free space in the block
    group. We need to keep track of these separately and _only_ use the
    max_free_space if we don't have a max_extent_size, as that means our
    original request was too large to search any of the block groups for and
    therefore wouldn't have a max_extent_size set.

    CC: stable@vger.kernel.org # 4.14+
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: Josef Bacik <jbacik@fb.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/btrfs/extent-tree.c | 7 +++++--
    1 file changed, 5 insertions(+), 2 deletions(-)

    --- a/fs/btrfs/extent-tree.c
    +++ b/fs/btrfs/extent-tree.c
    @@ -7573,6 +7573,7 @@ static noinline int find_free_extent(str
    struct btrfs_block_group_cache *block_group = NULL;
    u64 search_start = 0;
    u64 max_extent_size = 0;
    + u64 max_free_space = 0;
    u64 empty_cluster = 0;
    struct btrfs_space_info *space_info;
    int loop = 0;
    @@ -7867,8 +7868,8 @@ unclustered_alloc:
    spin_lock(&ctl->tree_lock);
    if (ctl->free_space <
    num_bytes + empty_cluster + empty_size) {
    - if (ctl->free_space > max_extent_size)
    - max_extent_size = ctl->free_space;
    + max_free_space = max(max_free_space,
    + ctl->free_space);
    spin_unlock(&ctl->tree_lock);
    goto loop;
    }
    @@ -8037,6 +8038,8 @@ loop:
    }
    out:
    if (ret == -ENOSPC) {
    + if (!max_extent_size)
    + max_extent_size = max_free_space;
    spin_lock(&space_info->lock);
    space_info->max_extent_size = max_extent_size;
    spin_unlock(&space_info->lock);

    \
     
     \ /
      Last update: 2018-11-11 23:50    [W:2.209 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site