kernel/rcu/rcu_segcblist.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Use WRITE_ONCE() for rclp->len decrement in rcu_cblist_dequeue() to
maintain consistency with rcu_cblist_enqueue(), which already uses
WRITE_ONCE() for rclp->len increment. It maintains consistent access
patterns to the rclp->len field across both enqueue and dequeue operations.
Signed-off-by: Kaushlendra Kumar <kaushlendra.kumar@intel.com>
---
Changes in v2:
- Revised justification to focus on code consistency rather than
concurrent access claims.
- Revised commit message to use imperative mood throughout per kernel
documentation guidelines (suggested by Markus Elfring).
kernel/rcu/rcu_segcblist.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/rcu/rcu_segcblist.c b/kernel/rcu/rcu_segcblist.c
index 1693ea22ef1b..e10b36e9de54 100644
--- a/kernel/rcu/rcu_segcblist.c
+++ b/kernel/rcu/rcu_segcblist.c
@@ -71,7 +71,7 @@ struct rcu_head *rcu_cblist_dequeue(struct rcu_cblist *rclp)
rhp = rclp->head;
if (!rhp)
return NULL;
- rclp->len--;
+ WRITE_ONCE(rclp->len, rclp->len - 1);
rclp->head = rhp->next;
if (!rclp->head)
rclp->tail = &rclp->head;
--
2.34.1
On Thu, Sep 11, 2025 at 09:56:41PM +0530, Kaushlendra Kumar wrote: > Use WRITE_ONCE() for rclp->len decrement in rcu_cblist_dequeue() to > maintain consistency with rcu_cblist_enqueue(), which already uses > WRITE_ONCE() for rclp->len increment. It maintains consistent access > patterns to the rclp->len field across both enqueue and dequeue operations. > > Signed-off-by: Kaushlendra Kumar <kaushlendra.kumar@intel.com> Again, why is this patch needed? Please keep in mind that unmarked normal C-language loads and stores have value in that KCSAN can detect data races involving them. If we decorate all loads and stores with READ_ONCE() and WRITE_ONCE(), respectively, KCSAN is unable to detect buggy concurrent accesses. Thanx, Paul > --- > Changes in v2: > - Revised justification to focus on code consistency rather than > concurrent access claims. > - Revised commit message to use imperative mood throughout per kernel > documentation guidelines (suggested by Markus Elfring). > > kernel/rcu/rcu_segcblist.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/rcu/rcu_segcblist.c b/kernel/rcu/rcu_segcblist.c > index 1693ea22ef1b..e10b36e9de54 100644 > --- a/kernel/rcu/rcu_segcblist.c > +++ b/kernel/rcu/rcu_segcblist.c > @@ -71,7 +71,7 @@ struct rcu_head *rcu_cblist_dequeue(struct rcu_cblist *rclp) > rhp = rclp->head; > if (!rhp) > return NULL; > - rclp->len--; > + WRITE_ONCE(rclp->len, rclp->len - 1); > rclp->head = rhp->next; > if (!rclp->head) > rclp->tail = &rclp->head; > -- > 2.34.1 >
On Thu, 11 Sep 2025, Kaushlendra Kumar wrote: >Use WRITE_ONCE() for rclp->len decrement in rcu_cblist_dequeue() to >maintain consistency with rcu_cblist_enqueue(), which already uses >WRITE_ONCE() for rclp->len increment. It maintains consistent access >patterns to the rclp->len field across both enqueue and dequeue operations. > >Signed-off-by: Kaushlendra Kumar <kaushlendra.kumar@intel.com> Reviewed-by: Davidlohr Bueso <dave@stgolabs.net>
© 2016 - 2025 Red Hat, Inc.