diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2015-09-21 07:02:17 +0200 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2015-11-23 19:37:35 +0100 |
commit | 1c97be677f72b3c338312aecd36d8fff20322f32 (patch) | |
tree | 805643267b5d6cc61c8dd168c4610c554cd76a68 /lib | |
parent | rcu: Add transitivity to remaining rcu_node ->lock acquisitions (diff) | |
download | linux-1c97be677f72b3c338312aecd36d8fff20322f32.tar.xz linux-1c97be677f72b3c338312aecd36d8fff20322f32.zip |
list: Use WRITE_ONCE() when adding to lists and hlists
Code that does lockless emptiness testing of non-RCU lists is relying
on the list-addition code to write the list head's ->next pointer
atomically. This commit therefore adds WRITE_ONCE() to list-addition
pointer stores that could affect the head's ->next pointer.
Reported-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/list_debug.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/list_debug.c b/lib/list_debug.c index c24c2f7e296f..3859bf63561c 100644 --- a/lib/list_debug.c +++ b/lib/list_debug.c @@ -37,7 +37,7 @@ void __list_add(struct list_head *new, next->prev = new; new->next = next; new->prev = prev; - prev->next = new; + WRITE_ONCE(prev->next, new); } EXPORT_SYMBOL(__list_add); |