Commit b017a92b authored by Yangtao Li's avatar Yangtao Li Committed by David Sterba
Browse files

btrfs: use rb_find_add() in ulist_rbtree_insert()



Use the rb-tree helper so we don't open code the search and insert
code.

Signed-off-by: default avatarYangtao Li <frank.li@vivo.com>
Signed-off-by: default avatarPan Chuang <panchuang@vivo.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent c4f38e7c
Loading
Loading
Loading
Loading
+12 −17
Original line number Diff line number Diff line
@@ -159,25 +159,20 @@ static void ulist_rbtree_erase(struct ulist *ulist, struct ulist_node *node)
	ulist->nnodes--;
}

static int ulist_node_val_cmp(struct rb_node *new, const struct rb_node *existing)
{
	const struct ulist_node *unode = rb_entry(new, struct ulist_node, rb_node);

	return ulist_node_val_key_cmp(&unode->val, existing);
}

static int ulist_rbtree_insert(struct ulist *ulist, struct ulist_node *ins)
{
	struct rb_node **p = &ulist->root.rb_node;
	struct rb_node *parent = NULL;
	struct ulist_node *cur = NULL;

	while (*p) {
		parent = *p;
		cur = rb_entry(parent, struct ulist_node, rb_node);

		if (cur->val < ins->val)
			p = &(*p)->rb_right;
		else if (cur->val > ins->val)
			p = &(*p)->rb_left;
		else
	struct rb_node *node;

	node = rb_find_add(&ins->rb_node, &ulist->root, ulist_node_val_cmp);
	if (node)
		return -EEXIST;
	}
	rb_link_node(&ins->rb_node, parent, p);
	rb_insert_color(&ins->rb_node, &ulist->root);
	return 0;
}