Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Yangtao Li and committed by
David Sterba
b017a92b c4f38e7c

+11 -16
+11 -16
fs/btrfs/ulist.c
··· 159 159 ulist->nnodes--; 160 160 } 161 161 162 + static int ulist_node_val_cmp(struct rb_node *new, const struct rb_node *existing) 163 + { 164 + const struct ulist_node *unode = rb_entry(new, struct ulist_node, rb_node); 165 + 166 + return ulist_node_val_key_cmp(&unode->val, existing); 167 + } 168 + 162 169 static int ulist_rbtree_insert(struct ulist *ulist, struct ulist_node *ins) 163 170 { 164 - struct rb_node **p = &ulist->root.rb_node; 165 - struct rb_node *parent = NULL; 166 - struct ulist_node *cur = NULL; 171 + struct rb_node *node; 167 172 168 - while (*p) { 169 - parent = *p; 170 - cur = rb_entry(parent, struct ulist_node, rb_node); 171 - 172 - if (cur->val < ins->val) 173 - p = &(*p)->rb_right; 174 - else if (cur->val > ins->val) 175 - p = &(*p)->rb_left; 176 - else 177 - return -EEXIST; 178 - } 179 - rb_link_node(&ins->rb_node, parent, p); 180 - rb_insert_color(&ins->rb_node, &ulist->root); 173 + node = rb_find_add(&ins->rb_node, &ulist->root, ulist_node_val_cmp); 174 + if (node) 175 + return -EEXIST; 181 176 return 0; 182 177 } 183 178