]> www.infradead.org Git - nvme.git/commitdiff
btrfs: push lookup_info into struct walk_control
authorJosef Bacik <josef@toxicpanda.com>
Tue, 7 May 2024 18:12:05 +0000 (14:12 -0400)
committerDavid Sterba <dsterba@suse.com>
Thu, 11 Jul 2024 13:33:24 +0000 (15:33 +0200)
Instead of using a flag we're passing around everywhere, add a field to
walk_control that we're already passing around everywhere and use that
instead.

Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent-tree.c

index cff46f04b32d262558eaa992c0fcd2ac6a130102..e72b7e82cd65a801c8bddc3decfc82f7dbe30342 100644 (file)
@@ -5220,6 +5220,8 @@ struct walk_control {
        int reada_slot;
        int reada_count;
        int restarted;
+       /* Indicate that extent info needs to be looked up when walking the tree. */
+       int lookup_info;
 };
 
 #define DROP_REFERENCE 1
@@ -5316,7 +5318,7 @@ reada:
 static noinline int walk_down_proc(struct btrfs_trans_handle *trans,
                                   struct btrfs_root *root,
                                   struct btrfs_path *path,
-                                  struct walk_control *wc, int lookup_info)
+                                  struct walk_control *wc)
 {
        struct btrfs_fs_info *fs_info = root->fs_info;
        int level = wc->level;
@@ -5331,7 +5333,7 @@ static noinline int walk_down_proc(struct btrfs_trans_handle *trans,
         * when reference count of tree block is 1, it won't increase
         * again. once full backref flag is set, we never clear it.
         */
-       if (lookup_info &&
+       if (wc->lookup_info &&
            ((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) ||
             (wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) {
                BUG_ON(!path->locks[level]);
@@ -5423,7 +5425,7 @@ static int check_ref_exists(struct btrfs_trans_handle *trans,
 static noinline int do_walk_down(struct btrfs_trans_handle *trans,
                                 struct btrfs_root *root,
                                 struct btrfs_path *path,
-                                struct walk_control *wc, int *lookup_info)
+                                struct walk_control *wc)
 {
        struct btrfs_fs_info *fs_info = root->fs_info;
        u64 bytenr;
@@ -5445,7 +5447,7 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans,
         */
        if (wc->stage == UPDATE_BACKREF &&
            generation <= root->root_key.offset) {
-               *lookup_info = 1;
+               wc->lookup_info = 1;
                return 1;
        }
 
@@ -5477,7 +5479,7 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans,
                ret = -EIO;
                goto out_unlock;
        }
-       *lookup_info = 0;
+       wc->lookup_info = 0;
 
        if (wc->stage == DROP_REFERENCE) {
                if (wc->refs[level - 1] > 1) {
@@ -5515,7 +5517,7 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans,
                        return ret;
                }
                btrfs_tree_lock(next);
-               *lookup_info = 1;
+               wc->lookup_info = 1;
        }
 
        level--;
@@ -5604,7 +5606,7 @@ skip:
                        goto out_unlock;
        }
 no_delete:
-       *lookup_info = 1;
+       wc->lookup_info = 1;
        ret = 1;
 
 out_unlock:
@@ -5738,11 +5740,11 @@ static noinline int walk_down_tree(struct btrfs_trans_handle *trans,
                                   struct walk_control *wc)
 {
        int level = wc->level;
-       int lookup_info = 1;
        int ret = 0;
 
+       wc->lookup_info = 1;
        while (level >= 0) {
-               ret = walk_down_proc(trans, root, path, wc, lookup_info);
+               ret = walk_down_proc(trans, root, path, wc);
                if (ret)
                        break;
 
@@ -5753,7 +5755,7 @@ static noinline int walk_down_tree(struct btrfs_trans_handle *trans,
                    btrfs_header_nritems(path->nodes[level]))
                        break;
 
-               ret = do_walk_down(trans, root, path, wc, &lookup_info);
+               ret = do_walk_down(trans, root, path, wc);
                if (ret > 0) {
                        path->slots[level]++;
                        continue;