Currently if our extent buffer isn't uptodate we will drop the lock,
free it, and then call read_tree_block() for the bytenr.  This is
inefficient, we already have the extent buffer, we can simply call
btrfs_read_extent_buffer().
Merge these two cases down into one if statement, if we are not uptodate
we can drop the lock, trigger readahead, and do the read using
btrfs_read_extent_buffer(), and carry on.
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
 
        if (!btrfs_buffer_uptodate(next, generation, 0)) {
                btrfs_tree_unlock(next);
-               free_extent_buffer(next);
-               next = NULL;
-               *lookup_info = 1;
-       }
-
-       if (!next) {
                if (level == 1)
                        reada_walk_down(trans, root, wc, path);
-               next = read_tree_block(fs_info, bytenr, &check);
-               if (IS_ERR(next)) {
-                       return PTR_ERR(next);
-               } else if (!extent_buffer_uptodate(next)) {
+               ret = btrfs_read_extent_buffer(next, &check);
+               if (ret) {
                        free_extent_buffer(next);
-                       return -EIO;
+                       return ret;
                }
                btrfs_tree_lock(next);
+               *lookup_info = 1;
        }
 
        level--;