Commit ec60c76f authored by David Sterba's avatar David Sterba
Browse files

btrfs: make tree search for insert more generic and use it for tree_search



With a slight extension of tree_search_for_insert (fill the return node
and parent return parameters) we can avoid calling __etree_search from
tree_search, that could be removed eventually in followup patches.

Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent bebb22c1
Loading
Loading
Loading
Loading
+13 −14
Original line number Diff line number Diff line
@@ -443,20 +443,6 @@ tree_search_for_insert(struct extent_io_tree *tree,
		       u64 offset,
		       struct rb_node ***p_ret,
		       struct rb_node **parent_ret)
{
	struct rb_node *next= NULL;
	struct rb_node *ret;

	ret = __etree_search(tree, offset, &next, NULL, p_ret, parent_ret);
	if (!ret)
		return next;
	return ret;
}

/*
 * Inexact rb-tree search, return the next entry if @offset is not found
 */
static inline struct rb_node *tree_search(struct extent_io_tree *tree, u64 offset)
{
	struct rb_root *root = &tree->state;
	struct rb_node **node = &root->rb_node;
@@ -475,6 +461,11 @@ static inline struct rb_node *tree_search(struct extent_io_tree *tree, u64 offse
			return *node;
	}

	if (p_ret)
		*p_ret = node;
	if (parent_ret)
		*parent_ret = prev;

	/* Search neighbors until we find the first one past the end */
	while (prev && offset > entry->end) {
		prev = rb_next(prev);
@@ -484,6 +475,14 @@ static inline struct rb_node *tree_search(struct extent_io_tree *tree, u64 offse
	return prev;
}

/*
 * Inexact rb-tree search, return the next entry if @offset is not found
 */
static inline struct rb_node *tree_search(struct extent_io_tree *tree, u64 offset)
{
	return tree_search_for_insert(tree, offset, NULL, NULL);
}

/*
 * utility function to look for merge candidates inside a given range.
 * Any extents with matching state are merged together into a single