Skip to content

Commit

Permalink
btrfs: use btrfs_read_extent_buffer() in do_walk_down()
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: David Sterba <[email protected]>
Signed-off-by: David Sterba <[email protected]>
  • Loading branch information
josefbacik authored and kdave committed Jul 11, 2024
1 parent 133b3da commit 3fdf579
Showing 1 changed file with 4 additions and 11 deletions.
15 changes: 4 additions & 11 deletions fs/btrfs/extent-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -5507,22 +5507,15 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans,

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--;
Expand Down

0 comments on commit 3fdf579

Please sign in to comment.