]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
btrfs: remove local variable need_account in do_walk_down()
authorJosef Bacik <josef@toxicpanda.com>
Tue, 7 May 2024 18:12:07 +0000 (14:12 -0400)
committerDavid Sterba <dsterba@suse.com>
Thu, 11 Jul 2024 13:33:24 +0000 (15:33 +0200)
We only set this if wc->refs[level - 1] > 1, and we check this way up
above where we need it because the first thing we do before dropping our
refs is reset wc->refs[level - 1] to 0.  Reorder resetting of wc->refs
to after our drop logic, and then remove the need_account variable and
simply check wc->refs[level - 1] directly instead of using a variable.

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 4a516ad087e703cc3b8c1ba8d954c51d1e294138..5a2102d0b95f9246900b249cddcba63986246253 100644 (file)
@@ -5477,7 +5477,6 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans,
        struct extent_buffer *next;
        int level = wc->level;
        int ret = 0;
-       bool need_account = false;
 
        generation = btrfs_node_ptr_generation(path->nodes[level],
                                               path->slots[level]);
@@ -5517,7 +5516,6 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans,
 
        if (wc->stage == DROP_REFERENCE) {
                if (wc->refs[level - 1] > 1) {
-                       need_account = true;
                        if (level == 1 &&
                            (wc->flags[0] & BTRFS_BLOCK_FLAG_FULL_BACKREF))
                                goto skip;
@@ -5560,8 +5558,6 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans,
                wc->reada_slot = 0;
        return 0;
 skip:
-       wc->refs[level - 1] = 0;
-       wc->flags[level - 1] = 0;
        if (wc->stage == DROP_REFERENCE) {
                struct btrfs_ref ref = {
                        .action = BTRFS_DROP_DELAYED_REF,
@@ -5606,7 +5602,8 @@ skip:
                 * already accounted them at merge time (replace_path),
                 * thus we could skip expensive subtree trace here.
                 */
-               if (btrfs_root_id(root) != BTRFS_TREE_RELOC_OBJECTID && need_account) {
+               if (btrfs_root_id(root) != BTRFS_TREE_RELOC_OBJECTID &&
+                   wc->refs[level - 1] > 1) {
                        ret = btrfs_qgroup_trace_subtree(trans, next,
                                                         generation, level - 1);
                        if (ret) {
@@ -5631,6 +5628,8 @@ skip:
                        goto out_unlock;
        }
 no_delete:
+       wc->refs[level - 1] = 0;
+       wc->flags[level - 1] = 0;
        wc->lookup_info = 1;
        ret = 1;