btrfs: use rb_find_add() in ulist_rbtree_insert()
authorYangtao Li <frank.li@vivo.com>
Fri, 16 May 2025 03:03:22 +0000 (11:03 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 21 Jul 2025 21:53:25 +0000 (23:53 +0200)
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>
fs/btrfs/ulist.c

index c3127ed0e35d05e364b155cf806add84d36a78f4..7e16a253fb35abba2efa1556d5ba21e63cbe3195 100644 (file)
@@ -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
-                       return -EEXIST;
-       }
-       rb_link_node(&ins->rb_node, parent, p);
-       rb_insert_color(&ins->rb_node, &ulist->root);
+       struct rb_node *node;
+
+       node = rb_find_add(&ins->rb_node, &ulist->root, ulist_node_val_cmp);
+       if (node)
+               return -EEXIST;
        return 0;
 }