btrfs: use rb_find_add() in rb_simple_insert()
authorPan Chuang <panchuang@vivo.com>
Fri, 16 May 2025 03:03:33 +0000 (11:03 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 21 Jul 2025 21:53:26 +0000 (23:53 +0200)
Use the rb-tree helper so we don't open code the search and insert
code.

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/misc.h

index e28bca1b3de530fa6bbb0a492177665da6ebe08f..9cc292402696ccdc14eff7262d98ce474126798f 100644 (file)
@@ -119,28 +119,23 @@ static inline struct rb_node *rb_simple_search_first(const struct rb_root *root,
        return ret;
 }
 
-static inline struct rb_node *rb_simple_insert(struct rb_root *root,
-                                              struct rb_simple_node *simple_node)
+static int rb_simple_node_bytenr_cmp(struct rb_node *new, const struct rb_node *existing)
 {
-       struct rb_node **p = &root->rb_node;
-       struct rb_node *parent = NULL;
-       struct rb_simple_node *entry;
+       struct rb_simple_node *new_entry = rb_entry(new, struct rb_simple_node, rb_node);
+       struct rb_simple_node *existing_entry = rb_entry(existing, struct rb_simple_node, rb_node);
 
-       while (*p) {
-               parent = *p;
-               entry = rb_entry(parent, struct rb_simple_node, rb_node);
+       if (new_entry->bytenr < existing_entry->bytenr)
+               return -1;
+       else if (new_entry->bytenr > existing_entry->bytenr)
+               return 1;
 
-               if (simple_node->bytenr < entry->bytenr)
-                       p = &(*p)->rb_left;
-               else if (simple_node->bytenr > entry->bytenr)
-                       p = &(*p)->rb_right;
-               else
-                       return parent;
-       }
+       return 0;
+}
 
-       rb_link_node(&simple_node->rb_node, parent, p);
-       rb_insert_color(&simple_node->rb_node, root);
-       return NULL;
+static inline struct rb_node *rb_simple_insert(struct rb_root *root,
+                                              struct rb_simple_node *simple_node)
+{
+       return rb_find_add(&simple_node->rb_node, root, rb_simple_node_bytenr_cmp);
 }
 
 static inline bool bitmap_test_range_all_set(const unsigned long *addr,