• Josef Bacik's avatar
    Btrfs: make tree_search_offset more flexible in its searching · 37d3cddd
    Josef Bacik authored
    Sometimes we end up freeing a reserved extent because we don't need it, however
    this means that its possible for transaction->last_alloc to point to the middle
    of a free area.
    
    When we search for free space in find_free_space we do a tree_search_offset
    with contains set to 0, because we want it to find the next best free area if
    we do not have an offset starting on the given offset.
    
    Unfortunately that currently means that if the offset we were given as a hint
    points to the middle of a free area, we won't find anything.  This is especially
    bad if we happened to last allocate from the big huge chunk of a newly formed
    block group, since we won't find anything and have to go back and search the
    long way around.
    
    This fixes this problem by making it so that we return the free space area
    regardless of the contains variable.  This made cache missing happen _alot_
    less, and speeds things up considerably.
    Signed-off-by: default avatarJosef Bacik <jbacik@redhat.com>
    37d3cddd
free-space-cache.c 11 KB