mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-04 09:59:32 +00:00
btrfs: avoid searching twice for previous node when merging free space entries
At try_merge_free_space(), avoid calling twice rb_prev() to find the previous node, as that requires looping through the red black tree, so store the result of the rb_prev() call and then use it. Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
fbb2e654d8
commit
9085f42571
1 changed files with 6 additions and 3 deletions
|
@ -2449,6 +2449,7 @@ static bool try_merge_free_space(struct btrfs_free_space_ctl *ctl,
|
|||
u64 offset = info->offset;
|
||||
u64 bytes = info->bytes;
|
||||
const bool is_trimmed = btrfs_free_space_trimmed(info);
|
||||
struct rb_node *right_prev = NULL;
|
||||
|
||||
/*
|
||||
* first we want to see if there is free space adjacent to the range we
|
||||
|
@ -2456,9 +2457,11 @@ static bool try_merge_free_space(struct btrfs_free_space_ctl *ctl,
|
|||
* cover the entire range
|
||||
*/
|
||||
right_info = tree_search_offset(ctl, offset + bytes, 0, 0);
|
||||
if (right_info && rb_prev(&right_info->offset_index))
|
||||
left_info = rb_entry(rb_prev(&right_info->offset_index),
|
||||
struct btrfs_free_space, offset_index);
|
||||
if (right_info)
|
||||
right_prev = rb_prev(&right_info->offset_index);
|
||||
|
||||
if (right_prev)
|
||||
left_info = rb_entry(right_prev, struct btrfs_free_space, offset_index);
|
||||
else if (!right_info)
|
||||
left_info = tree_search_offset(ctl, offset - 1, 0, 0);
|
||||
|
||||
|
|
Loading…
Reference in a new issue