include/linux/rbtree.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)
Implement the function "rb_remove()", which can perform the removal of a
certain key from the tree. Once the node with the searched key is found,
we call "rb_erase()" to perform the removal of the node, otherwise the
key doesn't exists in the tree then we return NULL.
Signed-off-by: I Hsin Cheng <richard120310@gmail.com>
---
include/linux/rbtree.h | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/include/linux/rbtree.h b/include/linux/rbtree.h
index f7edca369..1958be66f 100644
--- a/include/linux/rbtree.h
+++ b/include/linux/rbtree.h
@@ -302,6 +302,34 @@ rb_find_first(const void *key, const struct rb_root *tree,
return match;
}
+/**
+ * rb_remove() - remove @key in tree @tree
+ * @key: key to remove
+ * @tree: tree to modify
+ * @less: operator defining the (partial) node order
+ */
+static __always_inline struct rb_node *
+rb_remove(const void *key, const struct rb_root *tree,
+ int (*cmp)(const void *key, const struct rb_node *))
+{
+ struct rb_node *node = tree->rb_node;
+
+ while (node) {
+ int c = cmp(key, node);
+
+ if (c < 0)
+ node = node->rb_left;
+ else if (c > 0)
+ node = node->rb_right;
+ else {
+ rb_erase(node, tree->rb_node);
+ return node;
+ }
+ }
+
+ return NULL;
+}
+
/**
* rb_next_match() - find the next @key in @tree
* @key: key to match
--
2.34.1
On Thu, 28 Mar 2024 14:45:39 +0800 I Hsin Cheng <richard120310@gmail.com> wrote: > Implement the function "rb_remove()", which can perform the removal of a > certain key from the tree. Once the node with the searched key is found, > we call "rb_erase()" to perform the removal of the node, otherwise the > key doesn't exists in the tree then we return NULL. > > ... > We wouldn't merge a change like this unless there are callers of the new function. Please tell us everything about that.
© 2016 - 2026 Red Hat, Inc.