Commit 0877597d authored by Roger L. Beckermeyer III's avatar Roger L. Beckermeyer III Committed by David Sterba
Browse files

btrfs: update __btrfs_add_delayed_item() to use rb helper



Update __btrfs_add_delayed_item() to use rb_find_add_cached().

Signed-off-by: default avatarRoger L. Beckermeyer III <beckerlee3@gmail.com>
Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 14ae60c7
Loading
Loading
Loading
Loading
+19 −24
Original line number Diff line number Diff line
@@ -366,40 +366,35 @@ static struct btrfs_delayed_item *__btrfs_lookup_delayed_item(
	return NULL;
}

static int btrfs_delayed_item_cmp(const struct rb_node *new,
				  const struct rb_node *exist)
{
	const struct btrfs_delayed_item *new_item =
		rb_entry(new, struct btrfs_delayed_item, rb_node);
	const struct btrfs_delayed_item *exist_item =
		rb_entry(exist, struct btrfs_delayed_item, rb_node);

	if (new_item->index < exist_item->index)
		return -1;
	if (new_item->index > exist_item->index)
		return 1;
	return 0;
}

static int __btrfs_add_delayed_item(struct btrfs_delayed_node *delayed_node,
				    struct btrfs_delayed_item *ins)
{
	struct rb_node **p, *node;
	struct rb_node *parent_node = NULL;
	struct rb_root_cached *root;
	struct btrfs_delayed_item *item;
	bool leftmost = true;
	struct rb_node *exist;

	if (ins->type == BTRFS_DELAYED_INSERTION_ITEM)
		root = &delayed_node->ins_root;
	else
		root = &delayed_node->del_root;

	p = &root->rb_root.rb_node;
	node = &ins->rb_node;

	while (*p) {
		parent_node = *p;
		item = rb_entry(parent_node, struct btrfs_delayed_item,
				 rb_node);

		if (item->index < ins->index) {
			p = &(*p)->rb_right;
			leftmost = false;
		} else if (item->index > ins->index) {
			p = &(*p)->rb_left;
		} else {
	exist = rb_find_add_cached(&ins->rb_node, root, btrfs_delayed_item_cmp);
	if (exist)
		return -EEXIST;
		}
	}

	rb_link_node(node, parent_node, p);
	rb_insert_color_cached(node, root, leftmost);

	if (ins->type == BTRFS_DELAYED_INSERTION_ITEM &&
	    ins->index >= delayed_node->index_cnt)