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

btrfs: use rb_find() in ulist_rbtree_search()

Use the rb-tree helper so we don't open code the search 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
c4f38e7c 97346858

+16 -12
+16 -12
fs/btrfs/ulist.c
··· 129 129 kfree(ulist); 130 130 } 131 131 132 + static int ulist_node_val_key_cmp(const void *key, const struct rb_node *node) 133 + { 134 + const u64 *val = key; 135 + const struct ulist_node *unode = rb_entry(node, struct ulist_node, rb_node); 136 + 137 + if (unode->val < *val) 138 + return 1; 139 + else if (unode->val > *val) 140 + return -1; 141 + 142 + return 0; 143 + } 144 + 132 145 static struct ulist_node *ulist_rbtree_search(struct ulist *ulist, u64 val) 133 146 { 134 - struct rb_node *n = ulist->root.rb_node; 135 - struct ulist_node *u = NULL; 147 + struct rb_node *node; 136 148 137 - while (n) { 138 - u = rb_entry(n, struct ulist_node, rb_node); 139 - if (u->val < val) 140 - n = n->rb_right; 141 - else if (u->val > val) 142 - n = n->rb_left; 143 - else 144 - return u; 145 - } 146 - return NULL; 149 + node = rb_find(&val, &ulist->root, ulist_node_val_key_cmp); 150 + return rb_entry_safe(node, struct ulist_node, rb_node); 147 151 } 148 152 149 153 static void ulist_rbtree_erase(struct ulist *ulist, struct ulist_node *node)