Index: linux-2.6/mm/slub.c =================================================================== --- linux-2.6.orig/mm/slub.c 2007-07-02 17:06:54.000000000 -0700 +++ linux-2.6/mm/slub.c 2007-07-02 17:10:21.000000000 -0700 @@ -1192,7 +1192,7 @@ if (slab_trylock(page)) { list_del(&page->lru); n->nr_partial--; - SetSlabFrozen(page); +// SetSlabFrozen(page); return 1; } return 0; @@ -1345,6 +1345,7 @@ * for correctness since allocations cannot occur if the lockless * freelist is empty. */ + ClearSlabLockless(page); s->cpu_slab[cpu] = NULL; if (likely(!page->lockless_freelist)) { unfreeze_slab(s, page); @@ -1462,9 +1463,9 @@ goto debug; object = page->freelist; - page->lockless_freelist = object[page->offset]; - page->inuse = s->objects; - page->freelist = NULL; + SetSlabLockless(page); + page->freelist = object[page->offset]; + page->inuse = cpu; slab_unlock(page); local_irq_restore(flags); return object;