diff options
author | Baruch Siach <baruch@tkos.co.il> | 2010-08-09 20:20:53 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-09 23:45:08 -0400 |
commit | e3f76e3386ee38e3654e81c2f3933ccca1f2d639 (patch) | |
tree | 180f192f01aca166b30a1f1a119e9d0e9fb3714b /lib | |
parent | 55817d3d5c480f96589359c10ad93fa2e707a029 (diff) |
list debugging: warn when deleting a deleted entry
Use the magic LIST_POISON* values to detect an incorrect use of list_del
on a deleted entry. This DEBUG_LIST specific warning is easier to
understand than the generic Oops message caused by LIST_POISON
dereference.
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Cc: Dave Jones <davej@codemonkey.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/list_debug.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/list_debug.c b/lib/list_debug.c index 1a39f4e3ae1f..344c710d16ca 100644 --- a/lib/list_debug.c +++ b/lib/list_debug.c | |||
@@ -43,6 +43,12 @@ EXPORT_SYMBOL(__list_add); | |||
43 | */ | 43 | */ |
44 | void list_del(struct list_head *entry) | 44 | void list_del(struct list_head *entry) |
45 | { | 45 | { |
46 | WARN(entry->next == LIST_POISON1, | ||
47 | "list_del corruption, next is LIST_POISON1 (%p)\n", | ||
48 | LIST_POISON1); | ||
49 | WARN(entry->next != LIST_POISON1 && entry->prev == LIST_POISON2, | ||
50 | "list_del corruption, prev is LIST_POISON2 (%p)\n", | ||
51 | LIST_POISON2); | ||
46 | WARN(entry->prev->next != entry, | 52 | WARN(entry->prev->next != entry, |
47 | "list_del corruption. prev->next should be %p, " | 53 | "list_del corruption. prev->next should be %p, " |
48 | "but was %p\n", entry, entry->prev->next); | 54 | "but was %p\n", entry, entry->prev->next); |