diff options
| author | Sun YangKai <sunk67188@gmail.com> | 2025-11-14 15:24:46 +0800 |
|---|---|---|
| committer | David Sterba <dsterba@suse.com> | 2025-11-25 01:50:56 +0100 |
| commit | 3afa17bf243cf384e8caa64e1e3fad8b543c7c83 (patch) | |
| tree | bfa9041b2ac08b168a44efb59418714a59c8dcaa | |
| parent | 31b37b766753682ec1434bb591c5edee94649597 (diff) | |
btrfs: optimize balance_level() path reference handling
Instead of incrementing refcount on 'left' node when it's referenced by
path, simply transfer ownership to path and set left to NULL. This
eliminates:
- Unnecessary refcount increment/decrement operations
- Redundant conditional checks for left node cleanup
The path now consistently owns the left node reference when used.
Signed-off-by: Sun YangKai <sunk67188@gmail.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
| -rw-r--r-- | fs/btrfs/ctree.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 3abddd2cdfd3..4df4c6cda620 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -1125,11 +1125,12 @@ static noinline int balance_level(struct btrfs_trans_handle *trans, /* update the path */ if (left) { if (btrfs_header_nritems(left) > orig_slot) { - refcount_inc(&left->refs); /* left was locked after cow */ path->nodes[level] = left; path->slots[level + 1] -= 1; path->slots[level] = orig_slot; + /* Left is now owned by path. */ + left = NULL; if (mid) { btrfs_tree_unlock(mid); free_extent_buffer(mid); @@ -1149,8 +1150,7 @@ out: free_extent_buffer(right); } if (left) { - if (path->nodes[level] != left) - btrfs_tree_unlock(left); + btrfs_tree_unlock(left); free_extent_buffer(left); } return ret; |
