From: Filipe Manana Date: Mon, 9 Feb 2026 10:54:27 +0000 (+0000) Subject: btrfs: remove redundant extent_buffer_uptodate() checks after read_tree_block() X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=90b7d4c415b2992125b8ff8fcd3191b14047fb7f;p=thirdparty%2Fkernel%2Flinux.git btrfs: remove redundant extent_buffer_uptodate() checks after read_tree_block() We have several places that call extent_buffer_uptodate() after reading a tree block with read_tree_block(), but that is redundant since we already call extent_buffer_uptodate() in the call chain of read_tree_block(): read_tree_block() btrfs_read_extent_buffer() read_extent_buffer_pages() returns -EIO if extent_buffer_uptodate() returns false So remove those redundant checks. Reviewed-by: Boris Burkov Signed-off-by: Filipe Manana Signed-off-by: David Sterba --- diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index 0428557fd77bf..273924ca912c2 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -858,11 +858,6 @@ static int add_missing_keys(struct btrfs_fs_info *fs_info, free_pref(ref); return PTR_ERR(eb); } - if (unlikely(!extent_buffer_uptodate(eb))) { - free_pref(ref); - free_extent_buffer(eb); - return -EIO; - } if (lock) btrfs_tree_read_lock(eb); @@ -1620,11 +1615,6 @@ again: ret = PTR_ERR(eb); goto out; } - if (unlikely(!extent_buffer_uptodate(eb))) { - free_extent_buffer(eb); - ret = -EIO; - goto out; - } if (!path->skip_locking) btrfs_tree_read_lock(eb); diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 7267b25026657..f2c925e90a878 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -822,7 +822,6 @@ struct extent_buffer *btrfs_read_node_slot(struct extent_buffer *parent, { int level = btrfs_header_level(parent); struct btrfs_tree_parent_check check = { 0 }; - struct extent_buffer *eb; if (slot < 0 || slot >= btrfs_header_nritems(parent)) return ERR_PTR(-ENOENT); @@ -835,16 +834,8 @@ struct extent_buffer *btrfs_read_node_slot(struct extent_buffer *parent, check.has_first_key = true; btrfs_node_key_to_cpu(parent, &check.first_key, slot); - eb = read_tree_block(parent->fs_info, btrfs_node_blockptr(parent, slot), - &check); - if (IS_ERR(eb)) - return eb; - if (unlikely(!extent_buffer_uptodate(eb))) { - free_extent_buffer(eb); - return ERR_PTR(-EIO); - } - - return eb; + return read_tree_block(parent->fs_info, btrfs_node_blockptr(parent, slot), + &check); } /* diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 200a165f9a840..0f863c263e35c 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -2024,11 +2024,6 @@ static int btrfs_replay_log(struct btrfs_fs_info *fs_info, btrfs_put_root(log_tree_root); return ret; } - if (unlikely(!extent_buffer_uptodate(log_tree_root->node))) { - btrfs_err(fs_info, "failed to read log tree"); - btrfs_put_root(log_tree_root); - return -EIO; - } /* returns with log_tree_root freed on success */ ret = btrfs_recover_log_trees(log_tree_root); @@ -2628,11 +2623,6 @@ static int load_super_root(struct btrfs_root *root, u64 bytenr, u64 gen, int lev root->node = NULL; return ret; } - if (unlikely(!extent_buffer_uptodate(root->node))) { - free_extent_buffer(root->node); - root->node = NULL; - return -EIO; - } btrfs_set_root_node(&root->root_item, root->node); root->commit_root = btrfs_root_node(root); diff --git a/fs/btrfs/print-tree.c b/fs/btrfs/print-tree.c index b7dfe877cf8d9..87e60a2d4bd81 100644 --- a/fs/btrfs/print-tree.c +++ b/fs/btrfs/print-tree.c @@ -626,10 +626,6 @@ void btrfs_print_tree(const struct extent_buffer *c, bool follow) next = read_tree_block(fs_info, btrfs_node_blockptr(c, i), &check); if (IS_ERR(next)) continue; - if (!extent_buffer_uptodate(next)) { - free_extent_buffer(next); - continue; - } if (btrfs_is_leaf(next) && level != 1) diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index 41589ce663718..b3107b2278c74 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -4883,10 +4883,6 @@ int btrfs_qgroup_trace_subtree_after_cow(struct btrfs_trans_handle *trans, reloc_eb = NULL; goto free_out; } - if (unlikely(!extent_buffer_uptodate(reloc_eb))) { - ret = -EIO; - goto free_out; - } ret = qgroup_trace_subtree_swap(trans, reloc_eb, subvol_eb, block->last_snapshot, block->trace_leaf); diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 033f74fd6225c..0612e260b52af 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c @@ -2440,10 +2440,7 @@ static int get_tree_block_key(struct btrfs_fs_info *fs_info, eb = read_tree_block(fs_info, block->bytenr, &check); if (IS_ERR(eb)) return PTR_ERR(eb); - if (unlikely(!extent_buffer_uptodate(eb))) { - free_extent_buffer(eb); - return -EIO; - } + if (block->level == 0) btrfs_item_key_to_cpu(eb, &block->key, 0); else diff --git a/fs/btrfs/tree-mod-log.c b/fs/btrfs/tree-mod-log.c index 603c1457130eb..a8094928f4c9b 100644 --- a/fs/btrfs/tree-mod-log.c +++ b/fs/btrfs/tree-mod-log.c @@ -1042,12 +1042,10 @@ struct extent_buffer *btrfs_get_old_root(struct btrfs_root *root, u64 time_seq) check.owner_root = btrfs_root_id(root); old = read_tree_block(fs_info, logical, &check); - if (WARN_ON(IS_ERR(old) || !extent_buffer_uptodate(old))) { - if (!IS_ERR(old)) - free_extent_buffer(old); + if (WARN_ON(IS_ERR(old))) { btrfs_warn(fs_info, - "failed to read tree block %llu from get_old_root", - logical); + "failed to read tree block %llu from get_old_root: %ld", + logical, PTR_ERR(old)); } else { struct tree_mod_elem *tm2;