• Josef Bacik's avatar
    Btrfs: fix seekiness due to finding the wrong block group · 45b8c9a8
    Josef Bacik authored
    This patch fixes a problem where we end up seeking too much when *last_ptr is
    valid.  This happens because btrfs_lookup_first_block_group only returns a
    block group that starts on or after the given search start, so if the
    search_start is in the middle of a block group it will return the block group
    after the given search_start, which is suboptimal.
    
    This patch fixes that by doing a btrfs_lookup_block_group, which will return
    the block group that contains the given search start.  If we fail to find a
    block group, we fall back on btrfs_lookup_first_block_group so we can find the
    next block group, not sure if this is absolutely needed, but better safe than
    sorry.
    
    Also if we can't find the block group that we need, or it happens to not be of
    the right type, we need to add empty_cluster since *last_ptr could point to a
    mismatched block group, which means we need to start over with empty_cluster
    added to total needed.  Thank you,
    Signed-off-by: default avatarJosef Bacik <jbacik@redhat.com>
    Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
    45b8c9a8
extent-tree.c 136 KB