Btrfs: make tree_search_offset more flexible in its searching
authorJosef Bacik <jbacik@redhat.com>
Fri, 10 Oct 2008 14:24:32 +0000 (10:24 -0400)
committerChris Mason <chris.mason@oracle.com>
Fri, 10 Oct 2008 14:24:32 +0000 (10:24 -0400)
commit37d3cdddf5378606f6eab99982ca16819745d8f4
treea4bb82fec6ea41b6a933fd781571d3995f2dcf6c
parenta3dddf3fc82a1f5942c0928abfd114e9a8c0d0c8
Btrfs: make tree_search_offset more flexible in its searching

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: Josef Bacik <jbacik@redhat.com>
fs/btrfs/free-space-cache.c