btrfs: add fast path for extent_state insertion
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 <dsterba@suse.com>
This commit is contained in:
parent
6d92b304ec
commit
fb8f07d2d8
@ -569,6 +569,20 @@ insert_new:
|
|||||||
return 0;
|
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
|
* split a given extent state struct in two, inserting the preallocated
|
||||||
* struct 'prealloc' as the newly created second half. 'split' indicates an
|
* struct 'prealloc' as the newly created second half. 'split' indicates an
|
||||||
@ -1021,10 +1035,7 @@ again:
|
|||||||
BUG_ON(!prealloc);
|
BUG_ON(!prealloc);
|
||||||
prealloc->start = start;
|
prealloc->start = start;
|
||||||
prealloc->end = end;
|
prealloc->end = end;
|
||||||
err = insert_state(tree, prealloc, &p, &parent, bits, changeset);
|
insert_state_fast(tree, prealloc, p, parent, bits, changeset);
|
||||||
if (err)
|
|
||||||
extent_io_tree_panic(tree, err);
|
|
||||||
|
|
||||||
cache_state(prealloc, cached_state);
|
cache_state(prealloc, cached_state);
|
||||||
prealloc = NULL;
|
prealloc = NULL;
|
||||||
goto out;
|
goto out;
|
||||||
@ -1264,9 +1275,7 @@ again:
|
|||||||
}
|
}
|
||||||
prealloc->start = start;
|
prealloc->start = start;
|
||||||
prealloc->end = end;
|
prealloc->end = end;
|
||||||
err = insert_state(tree, prealloc, &p, &parent, bits, NULL);
|
insert_state_fast(tree, prealloc, p, parent, bits, NULL);
|
||||||
if (err)
|
|
||||||
extent_io_tree_panic(tree, err);
|
|
||||||
cache_state(prealloc, cached_state);
|
cache_state(prealloc, cached_state);
|
||||||
prealloc = NULL;
|
prealloc = NULL;
|
||||||
goto out;
|
goto out;
|
||||||
|
Loading…
Reference in New Issue
Block a user