]> err.no Git - linux-2.6/commitdiff
[PATCH] slab: add additional debugging to detect slabs from the wrong node
authorChristoph Lameter <clameter@engr.sgi.com>
Sun, 30 Oct 2005 01:15:52 +0000 (18:15 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Sun, 30 Oct 2005 04:40:36 +0000 (21:40 -0700)
This patch adds some stack dumps if the slab logic is processing slab
blocks from the wrong node.  This is necessary in order to detect
situations as encountered by Petr.

Signed-off-by: Christoph Lameter <clameter@sgi.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
mm/slab.c

index d30423f167a2c0a5c4c4d13b0678495fffa86189..22bfb0b2ac8b441d479bbfe16028fa7e0db132e8 100644 (file)
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -2419,6 +2419,7 @@ retry:
                        next = slab_bufctl(slabp)[slabp->free];
 #if DEBUG
                        slab_bufctl(slabp)[slabp->free] = BUFCTL_FREE;
+                       WARN_ON(numa_node_id() != slabp->nodeid);
 #endif
                        slabp->free = next;
                }
@@ -2633,8 +2634,10 @@ static void free_block(kmem_cache_t *cachep, void **objpp, int nr_objects, int n
                check_spinlock_acquired_node(cachep, node);
                check_slabp(cachep, slabp);
 
-
 #if DEBUG
+               /* Verify that the slab belongs to the intended node */
+               WARN_ON(slabp->nodeid != node);
+
                if (slab_bufctl(slabp)[objnr] != BUFCTL_FREE) {
                        printk(KERN_ERR "slab: double free detected in cache "
                                        "'%s', objp %p\n", cachep->name, objp);