]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
btrfs: remove fs_info from struct btrfs_backref_iter
authorDavid Sterba <dsterba@suse.com>
Thu, 30 Apr 2026 15:25:00 +0000 (17:25 +0200)
committerDavid Sterba <dsterba@suse.com>
Mon, 8 Jun 2026 13:53:32 +0000 (15:53 +0200)
The fs_info is available everywhere and we don't need to store it inside
a structure that is used within one function only, which is
build_backref_tree(). The size of btrfs_backref_iter is now 48 bytes.

Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/backref.c
fs/btrfs/backref.h
fs/btrfs/relocation.c

index 2c25e5d86f3e42ba8b3fc1a53f325f4fe11d92fc..303f6cfc97c10d0b75a9c613910da7f0209917e8 100644 (file)
@@ -2814,7 +2814,7 @@ struct inode_fs_paths *init_ipath(s32 total_bytes, struct btrfs_root *fs_root,
        return ifp;
 }
 
-struct btrfs_backref_iter *btrfs_backref_iter_alloc(struct btrfs_fs_info *fs_info)
+struct btrfs_backref_iter *btrfs_backref_iter_alloc(void)
 {
        struct btrfs_backref_iter *ret;
 
@@ -2831,7 +2831,6 @@ struct btrfs_backref_iter *btrfs_backref_iter_alloc(struct btrfs_fs_info *fs_inf
        /* Current backref iterator only supports iteration in commit root */
        ret->path->search_commit_root = true;
        ret->path->skip_locking = true;
-       ret->fs_info = fs_info;
 
        return ret;
 }
@@ -2846,9 +2845,8 @@ static void btrfs_backref_iter_release(struct btrfs_backref_iter *iter)
        memset(&iter->cur_key, 0, sizeof(iter->cur_key));
 }
 
-int btrfs_backref_iter_start(struct btrfs_backref_iter *iter, u64 bytenr)
+int btrfs_backref_iter_start(struct btrfs_fs_info *fs_info, struct btrfs_backref_iter *iter, u64 bytenr)
 {
-       struct btrfs_fs_info *fs_info = iter->fs_info;
        struct btrfs_root *extent_root = btrfs_extent_root(fs_info, bytenr);
        struct btrfs_path *path = iter->path;
        struct btrfs_extent_item *ei;
@@ -2963,7 +2961,7 @@ static bool btrfs_backref_iter_is_inline_ref(struct btrfs_backref_iter *iter)
  * Return >0 if there is no extra backref for this bytenr.
  * Return <0 if there is something wrong happened.
  */
-int btrfs_backref_iter_next(struct btrfs_backref_iter *iter)
+int btrfs_backref_iter_next(struct btrfs_fs_info *fs_info, struct btrfs_backref_iter *iter)
 {
        struct extent_buffer *eb = iter->path->nodes[0];
        struct btrfs_root *extent_root;
@@ -2997,10 +2995,9 @@ int btrfs_backref_iter_next(struct btrfs_backref_iter *iter)
        }
 
        /* We're at keyed items, there is no inline item, go to the next one */
-       extent_root = btrfs_extent_root(iter->fs_info, iter->bytenr);
+       extent_root = btrfs_extent_root(fs_info, iter->bytenr);
        if (unlikely(!extent_root)) {
-               btrfs_err(iter->fs_info,
-                         "missing extent root for extent at bytenr %llu",
+               btrfs_err(fs_info, "missing extent root for extent at bytenr %llu",
                          iter->bytenr);
                return -EUCLEAN;
        }
@@ -3454,7 +3451,7 @@ int btrfs_backref_add_tree_node(struct btrfs_trans_handle *trans,
        struct btrfs_backref_node *exist;
        int ret;
 
-       ret = btrfs_backref_iter_start(iter, cur->bytenr);
+       ret = btrfs_backref_iter_start(trans->fs_info, iter, cur->bytenr);
        if (ret < 0)
                return ret;
        /*
@@ -3462,7 +3459,7 @@ int btrfs_backref_add_tree_node(struct btrfs_trans_handle *trans,
         * stored in it, but fetch it from the tree block
         */
        if (btrfs_backref_has_tree_block_info(iter)) {
-               ret = btrfs_backref_iter_next(iter);
+               ret = btrfs_backref_iter_next(trans->fs_info, iter);
                if (ret < 0)
                        goto out;
                /* No extra backref? This means the tree block is corrupted */
@@ -3492,7 +3489,7 @@ int btrfs_backref_add_tree_node(struct btrfs_trans_handle *trans,
                exist = NULL;
        }
 
-       for (; ret == 0; ret = btrfs_backref_iter_next(iter)) {
+       for (; ret == 0; ret = btrfs_backref_iter_next(trans->fs_info, iter)) {
                struct extent_buffer *eb;
                struct btrfs_key key;
                int type;
index 1d009b0f4c699ab8ecd2b7729d3c695f13d9dad3..96717460e2e04d883a306517bfeabd0440c18396 100644 (file)
@@ -278,14 +278,13 @@ struct prelim_ref {
 struct btrfs_backref_iter {
        u64 bytenr;
        struct btrfs_path *path;
-       struct btrfs_fs_info *fs_info;
        struct btrfs_key cur_key;
        u32 item_ptr;
        u32 cur_ptr;
        u32 end_ptr;
 };
 
-struct btrfs_backref_iter *btrfs_backref_iter_alloc(struct btrfs_fs_info *fs_info);
+struct btrfs_backref_iter *btrfs_backref_iter_alloc(void);
 
 /*
  * For metadata with EXTENT_ITEM key (non-skinny) case, the first inline data
@@ -302,9 +301,9 @@ static inline bool btrfs_backref_has_tree_block_info(
        return false;
 }
 
-int btrfs_backref_iter_start(struct btrfs_backref_iter *iter, u64 bytenr);
+int btrfs_backref_iter_start(struct btrfs_fs_info *fs_info, struct btrfs_backref_iter *iter, u64 bytenr);
 
-int btrfs_backref_iter_next(struct btrfs_backref_iter *iter);
+int btrfs_backref_iter_next(struct btrfs_fs_info *fs_info, struct btrfs_backref_iter *iter);
 
 /*
  * Backref cache related structures
index 9cbae3cf8bdd1e62f3dcea080ac5a9feb8a55063..843fdcacb3155513654ee01bb295de461eb73b94 100644 (file)
@@ -416,7 +416,7 @@ static noinline_for_stack struct btrfs_backref_node *build_backref_tree(
        struct btrfs_backref_edge *edge;
        int ret;
 
-       iter = btrfs_backref_iter_alloc(rc->extent_root->fs_info);
+       iter = btrfs_backref_iter_alloc();
        if (!iter)
                return ERR_PTR(-ENOMEM);
        path = btrfs_alloc_path();