mirror of
https://github.com/torvalds/linux.git
synced 2025-11-02 09:40:27 +02:00
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: Yangtao Li <frank.li@vivo.com> Signed-off-by: Pan Chuang <panchuang@vivo.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
c4f38e7ca5
commit
b017a92bd9
1 changed files with 11 additions and 16 deletions
|
|
@ -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;
|
||||
struct rb_node *node;
|
||||
|
||||
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
|
||||
return -EEXIST;
|
||||
}
|
||||
rb_link_node(&ins->rb_node, parent, p);
|
||||
rb_insert_color(&ins->rb_node, &ulist->root);
|
||||
node = rb_find_add(&ins->rb_node, &ulist->root, ulist_node_val_cmp);
|
||||
if (node)
|
||||
return -EEXIST;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue