summaryrefslogtreecommitdiff
path: root/include/linux/rculist.h
diff options
context:
space:
mode:
authorDave Jones <davej@redhat.com>2012-03-14 22:17:39 -0400
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2012-04-24 20:54:49 -0700
commit559f9badd11ddf399f88b18b4c0f110fd511ae53 (patch)
tree443f8c575362e19c01c07173c82b0fc3763ebc50 /include/linux/rculist.h
parent66f75a5d028beaf67c931435fdc3e7823125730c (diff)
downloadlwn-559f9badd11ddf399f88b18b4c0f110fd511ae53.tar.gz
lwn-559f9badd11ddf399f88b18b4c0f110fd511ae53.zip
rcu: List-debug variants of rcu list routines.
* Make __list_add_rcu check the next->prev and prev->next pointers just like __list_add does. * Make list_del_rcu use __list_del_entry, which does the same checking at deletion time. Has been running for a week here without anything being tripped up, but it seems worth adding for completeness just in case something ever does corrupt those lists. Signed-off-by: Dave Jones <davej@redhat.com> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'include/linux/rculist.h')
-rw-r--r--include/linux/rculist.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/include/linux/rculist.h b/include/linux/rculist.h
index d079290843a9..a20c05096231 100644
--- a/include/linux/rculist.h
+++ b/include/linux/rculist.h
@@ -30,6 +30,7 @@
* This is only for internal list manipulation where we know
* the prev/next entries already!
*/
+#ifndef CONFIG_DEBUG_LIST
static inline void __list_add_rcu(struct list_head *new,
struct list_head *prev, struct list_head *next)
{
@@ -38,6 +39,10 @@ static inline void __list_add_rcu(struct list_head *new,
rcu_assign_pointer(list_next_rcu(prev), new);
next->prev = new;
}
+#else
+extern void __list_add_rcu(struct list_head *new,
+ struct list_head *prev, struct list_head *next);
+#endif
/**
* list_add_rcu - add a new entry to rcu-protected list
@@ -108,7 +113,7 @@ static inline void list_add_tail_rcu(struct list_head *new,
*/
static inline void list_del_rcu(struct list_head *entry)
{
- __list_del(entry->prev, entry->next);
+ __list_del_entry(entry);
entry->prev = LIST_POISON2;
}