list_debug: WARN for adding something already in the list
Chris Metcalf [Tue, 29 May 2012 22:07:31 +0000 (15:07 -0700)]
We were bitten by this at one point and added an additional sanity test
for DEBUG_LIST.  You can't validly add a list_head to a list where either
prev or next is the same as the thing you're adding.

Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
Cc: Andi Kleen <andi@firstfloor.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

lib/list_debug.c

index 3810b48..23a5e03 100644 (file)
@@ -31,6 +31,9 @@ void __list_add(struct list_head *new,
                "list_add corruption. prev->next should be "
                "next (%p), but was %p. (prev=%p).\n",
                next, prev->next, prev);
+       WARN(new == prev || new == next,
+            "list_add double add: new=%p, prev=%p, next=%p.\n",
+            new, prev, next);
        next->prev = new;
        new->next = next;
        new->prev = prev;