Thread (12 messages) 12 messages, 2 authors, 2025-09-26

Re: [PATCH net-next v6 1/3] rculist: Add hlist_nulls_replace_rcu() and hlist_nulls_replace_init_rcu()

From: luoxuanqiang <hidden>
Date: 2025-09-26 04:34:08

在 2025/9/26 12:02, Kuniyuki Iwashima 写道:
On Thu, Sep 25, 2025 at 8:23 PM luoxuanqiang [off-list ref] wrote:
[...]
quoted
quoted
quoted
+{
+       struct hlist_nulls_node *next = old->next;
+
+       WRITE_ONCE(new->next, next);
+       WRITE_ONCE(new->pprev, old->pprev);
+       rcu_assign_pointer(*(struct hlist_nulls_node __rcu **)new->pprev, new);
nit: define hlist_nulls_prev_rcu() like hlist_nulls_next_rcu().
I'm wondering if defining a macro called hlist_nulls_prev_rcu() might
be controversial, since it should actually be getting the prev->next
rather than the prev itself.
See hlist_add_before_rcu() for an example:

     rcu_assign_pointer(hlist_pprev_rcu(n), n);

You can define hlist_nulls_pprev_rcu() and use it alike.

     rcu_assign_pointer(hlist_nulls_pprev_rcu(new), new);


[...]
quoted
However, I noticed that in the definition of hlist_pprev_rcu(), it directly
uses pprev:

#define hlist_pprev_rcu(node)    (*((struct hlist_node __rcu **)((node)->pprev)))
Note it dereferences *((node)->pprev).  The macro is not to iterate the
lengthy cast.
Thank you for the quick and clear explanation!

I'll apply these changes in the next version.

Appreciate it!
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help