--- mm/slub.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) Index: linux-2.6/mm/slub.c =================================================================== --- linux-2.6.orig/mm/slub.c 2007-10-26 21:57:24.000000000 -0700 +++ linux-2.6/mm/slub.c 2007-10-27 07:45:11.000000000 -0700 @@ -824,6 +824,7 @@ static void add_full(struct kmem_cache * if (!SlabDebug(page) || !(s->flags & SLAB_STORE_USER)) return; + printk("add_full(%s, %p)\n", s->name, page); spin_lock(&n->list_lock); list_add(&page->lru, &n->full); spin_unlock(&n->list_lock); @@ -838,6 +839,7 @@ static void remove_full(struct kmem_cach n = get_node(s, page_to_nid(page)); + printk("remove_full(%s, %p)\n", s->name, page); spin_lock(&n->list_lock); list_del(&page->lru); spin_unlock(&n->list_lock); @@ -930,7 +932,7 @@ static noinline int free_debug_processin } /* Special debug activities for freeing objects */ - if (!SlabFrozen(page) && !page->freelist) + if (!SlabFrozen(page) && page->freelist == page->end) remove_full(s, page); if (s->flags & SLAB_STORE_USER) set_track(s, object, TRACK_FREE, addr); @@ -1225,6 +1227,7 @@ static void add_partial(struct kmem_cach { struct kmem_cache_node *n = get_node(s, page_to_nid(page)); + printk("add_partial(%s, %p, %d)\n", s->name, page, tail); spin_lock(&n->list_lock); n->nr_partial++; if (tail) @@ -1239,6 +1242,7 @@ static noinline void remove_partial(stru { struct kmem_cache_node *n = get_node(s, page_to_nid(page)); + printk("remove_partial(%s, %p)\n", s->name, page); spin_lock(&n->list_lock); list_del(&page->lru); n->nr_partial--;