mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
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>
This commit is contained in:
committed by
David Sterba
parent
31b37b7667
commit
3afa17bf24
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user