Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 09ad4bbc authored by Christoph Lameter's avatar Christoph Lameter Committed by Linus Torvalds
Browse files

[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: default avatarChristoph Lameter <clameter@sgi.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent c340010e
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -2419,6 +2419,7 @@ static void *cache_alloc_refill(kmem_cache_t *cachep, gfp_t flags)
			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);