--- mm/slub.c | 11 +++++++++++ 1 file changed, 11 insertions(+) Index: linux-2.6.22-rc6-mm1/mm/slub.c =================================================================== --- linux-2.6.22-rc6-mm1.orig/mm/slub.c 2007-07-07 18:13:00.000000000 -0700 +++ linux-2.6.22-rc6-mm1/mm/slub.c 2007-07-07 18:13:26.000000000 -0700 @@ -1480,6 +1480,10 @@ static void *__slab_alloc(struct kmem_ca /* Slab was flushed */ goto new_slab; + WARN_ON(c->objsize != s->objsize); + WARN_ON(c->freelist && virt_to_head_page(c->freelist)!= c->page); + WARN_ON(page_to_nid(c->page) != c->node); + object = xchg(&c->freelist, NULL); slab_lock(c->page); @@ -1591,6 +1595,10 @@ redo: object[c->offset]) != object)) goto redo; + WARN_ON(c->objsize != s->objsize); + WARN_ON(c->freelist && virt_to_head_page(c->freelist)!= c->page); + WARN_ON(page_to_nid(c->page) != c->node); + if (unlikely((gfpflags & __GFP_ZERO))) memset(object, 0, c->objsize); @@ -1717,6 +1725,9 @@ redo: if (unlikely(cmpxchg(&c->freelist, freelist, object) != freelist)) goto redo; + WARN_ON(c->objsize != s->objsize); + WARN_ON(c->freelist && virt_to_head_page(c->freelist)!= c->page); + WARN_ON(page_to_nid(c->page) != c->node); return;