On Thu, Jul 06, 2023 at 10:28:48AM +0000, Alan Huang wrote: > When the objects managed by rculist_nulls are allocated with > SLAB_TYPESAFE_BY_RCU, readers may still hold references to this > object that is being added, which means the modification of ->next > is visible to readers. So, this patch uses WRITE_ONCE() for assignments > to ->next. > > Signed-off-by: Alan Huang <mmpgouride@xxxxxxxxx> Very good, queued for the v6.6 merge window, thank you! Thanx, Paul > --- > include/linux/rculist_nulls.h | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/include/linux/rculist_nulls.h b/include/linux/rculist_nulls.h > index ba4c00dd8005..89186c499dd4 100644 > --- a/include/linux/rculist_nulls.h > +++ b/include/linux/rculist_nulls.h > @@ -101,7 +101,7 @@ static inline void hlist_nulls_add_head_rcu(struct hlist_nulls_node *n, > { > struct hlist_nulls_node *first = h->first; > > - n->next = first; > + WRITE_ONCE(n->next, first); > WRITE_ONCE(n->pprev, &h->first); > rcu_assign_pointer(hlist_nulls_first_rcu(h), n); > if (!is_a_nulls(first)) > @@ -137,7 +137,7 @@ static inline void hlist_nulls_add_tail_rcu(struct hlist_nulls_node *n, > last = i; > > if (last) { > - n->next = last->next; > + WRITE_ONCE(n->next, last->next); > n->pprev = &last->next; > rcu_assign_pointer(hlist_nulls_next_rcu(last), n); > } else { > -- > 2.34.1 >