Btrfs: reuse the extent_map we found when calling btrfs_get_extent
authorJosef Bacik <josef@redhat.com>
Wed, 6 Apr 2011 18:53:07 +0000 (14:53 -0400)
committerJosef Bacik <josef@redhat.com>
Fri, 8 Apr 2011 17:00:41 +0000 (13:00 -0400)
commit16d299ac7446b5a75c5683a9ae11d7907d444c86
tree95358c2fdd7af672ec68c18fb43e2e90a7cd4551
parent1ae399382512b3e4d6c923e53da9e45935577040
Btrfs: reuse the extent_map we found when calling btrfs_get_extent

In btrfs_get_block_direct we call btrfs_get_extent to lookup the extent for the
range that we are looking for.  If we don't find an extent, btrfs_get_extent
will insert a extent_map for that area and mark it as a hole.  So it does the
job of allocating a new extent map and inserting it into the io tree.  But if
we're creating a new extent we free it up and redo all of that work.  So instead
pass the em to btrfs_new_extent_direct(), and if it will work just allocate the
disk space and set it up properly and bypass the freeing/allocating of a new
extent map and the expensive operation of inserting the thing into the io_tree.
Thanks,

Signed-off-by: Josef Bacik <josef@redhat.com>
fs/btrfs/inode.c