Browse Source

[PATCH] slab: add additional debugging to detect slabs from the wrong node

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>
Christoph Lameter 19 years ago
parent
commit
09ad4bbc3a
1 changed files with 4 additions and 1 deletions
  1. 4 1
      mm/slab.c

+ 4 - 1
mm/slab.c

@@ -2419,6 +2419,7 @@ retry:
 			next = slab_bufctl(slabp)[slabp->free];
 			next = slab_bufctl(slabp)[slabp->free];
 #if DEBUG
 #if DEBUG
 			slab_bufctl(slabp)[slabp->free] = BUFCTL_FREE;
 			slab_bufctl(slabp)[slabp->free] = BUFCTL_FREE;
+			WARN_ON(numa_node_id() != slabp->nodeid);
 #endif
 #endif
 		       	slabp->free = next;
 		       	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_spinlock_acquired_node(cachep, node);
 		check_slabp(cachep, slabp);
 		check_slabp(cachep, slabp);
 
 
-
 #if DEBUG
 #if DEBUG
+		/* Verify that the slab belongs to the intended node */
+		WARN_ON(slabp->nodeid != node);
+
 		if (slab_bufctl(slabp)[objnr] != BUFCTL_FREE) {
 		if (slab_bufctl(slabp)[objnr] != BUFCTL_FREE) {
 			printk(KERN_ERR "slab: double free detected in cache "
 			printk(KERN_ERR "slab: double free detected in cache "
 					"'%s', objp %p\n", cachep->name, objp);
 					"'%s', objp %p\n", cachep->name, objp);