diff options
author | 2015-10-12 16:56:42 -0700 | |
---|---|---|
committer | 2015-12-04 12:34:33 -0800 | |
commit | 2f073848c3cc8aff2655ab7c46d8c0de90cf4e50 (patch) | |
tree | a30a9e1b6f0edd5d1837c214cbf26c762fdb0a54 /include/linux/list.h | |
parent | list: Introduces generic list_splice_tail_init_rcu() (diff) | |
download | linux-2f073848c3cc8aff2655ab7c46d8c0de90cf4e50.tar.gz linux-2f073848c3cc8aff2655ab7c46d8c0de90cf4e50.tar.bz2 linux-2f073848c3cc8aff2655ab7c46d8c0de90cf4e50.zip |
list: Use WRITE_ONCE() when initializing list_head structures
Code that does lockless emptiness testing of non-RCU lists is relying
on INIT_LIST_HEAD() to write the list head's ->next pointer atomically,
particularly when INIT_LIST_HEAD() is invoked from list_del_init().
This commit therefore adds WRITE_ONCE() to this function's pointer stores
that could affect the head's ->next pointer.
Reported-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'include/linux/list.h')
-rw-r--r-- | include/linux/list.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/list.h b/include/linux/list.h index 06c2d887a918..5356f4d661a7 100644 --- a/include/linux/list.h +++ b/include/linux/list.h @@ -24,7 +24,7 @@ static inline void INIT_LIST_HEAD(struct list_head *list) { - list->next = list; + WRITE_ONCE(list->next, list); list->prev = list; } |