2024-03-28 06:46:23

by I Hsin Cheng

[permalink] [raw]
Subject: [PATCH] rbtree: Introduce rb_remove()

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 <[email protected]>
---
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



2024-03-28 19:36:15

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] rbtree: Introduce rb_remove()

On Thu, 28 Mar 2024 14:45:39 +0800 I Hsin Cheng <[email protected]> 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.


2024-03-30 08:39:07

by I Hsin Cheng

[permalink] [raw]
Subject: Re: [PATCH] rbtree: Introduce rb_remove()

>> We wouldn't merge a change like this unless there are callers of the
>> new function. Please tell us everything about that.

The last reply didn't follow the requested plain text form, I'm sorry about
that, again thanks for your patience and time on reviewing my patch.

Best Regards,

I Hsin Cheng.

鄭以新 <[email protected]> 於 2024年3月29日 週五 下午5:10寫道:
>>
>> We wouldn't merge a change like this unless there are callers of the
>> new function. Please tell us everything about that.
>
>
> I see, thanks for your review and the explanation.
>
> Andrew Morton <[email protected]> 於 2024年3月29日 週五 上午3:36寫道:
>>
>> On Thu, 28 Mar 2024 14:45:39 +0800 I Hsin Cheng <[email protected]> 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.
>>