mirror of
https://github.com/torvalds/linux.git
synced 2025-11-03 18:20:25 +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--;
|
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)
|
static int ulist_rbtree_insert(struct ulist *ulist, struct ulist_node *ins)
|
||||||
{
|
{
|
||||||
struct rb_node **p = &ulist->root.rb_node;
|
struct rb_node *node;
|
||||||
struct rb_node *parent = NULL;
|
|
||||||
struct ulist_node *cur = NULL;
|
|
||||||
|
|
||||||
while (*p) {
|
node = rb_find_add(&ins->rb_node, &ulist->root, ulist_node_val_cmp);
|
||||||
parent = *p;
|
if (node)
|
||||||
cur = rb_entry(parent, struct ulist_node, rb_node);
|
return -EEXIST;
|
||||||
|
|
||||||
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);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue