Skip to content

Commit

Permalink
btrfs: add fast path for extent_state insertion
Browse files Browse the repository at this point in the history
In two cases the exact location where to insert the extent state is
known at the call time so we don't need to pass it to insert_state that
takes the fast path.

Signed-off-by: David Sterba <[email protected]>
  • Loading branch information
kdave committed Jul 25, 2022
1 parent 6d92b30 commit fb8f07d
Showing 1 changed file with 16 additions and 7 deletions.
23 changes: 16 additions & 7 deletions fs/btrfs/extent_io.c
Original file line number Diff line number Diff line change
Expand Up @@ -569,6 +569,20 @@ static int insert_state(struct extent_io_tree *tree,
return 0;
}

/*
* Insert state to @tree to the location given by @node and @parent.
*/
static void insert_state_fast(struct extent_io_tree *tree,
struct extent_state *state, struct rb_node **node,
struct rb_node *parent, unsigned bits,
struct extent_changeset *changeset)
{
set_state_bits(tree, state, bits, changeset);
rb_link_node(&state->rb_node, parent, node);
rb_insert_color(&state->rb_node, &tree->state);
merge_state(tree, state);
}

/*
* split a given extent state struct in two, inserting the preallocated
* struct 'prealloc' as the newly created second half. 'split' indicates an
Expand Down Expand Up @@ -1021,10 +1035,7 @@ int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, u32 bits,
BUG_ON(!prealloc);
prealloc->start = start;
prealloc->end = end;
err = insert_state(tree, prealloc, &p, &parent, bits, changeset);
if (err)
extent_io_tree_panic(tree, err);

insert_state_fast(tree, prealloc, p, parent, bits, changeset);
cache_state(prealloc, cached_state);
prealloc = NULL;
goto out;
Expand Down Expand Up @@ -1264,9 +1275,7 @@ int convert_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
}
prealloc->start = start;
prealloc->end = end;
err = insert_state(tree, prealloc, &p, &parent, bits, NULL);
if (err)
extent_io_tree_panic(tree, err);
insert_state_fast(tree, prealloc, p, parent, bits, NULL);
cache_state(prealloc, cached_state);
prealloc = NULL;
goto out;
Expand Down

0 comments on commit fb8f07d

Please sign in to comment.