Index: linux-2.6.19-mm1/mm/slub.c =================================================================== --- linux-2.6.19-mm1.orig/mm/slub.c 2006-12-12 18:27:13.000000000 -0800 +++ linux-2.6.19-mm1/mm/slub.c 2006-12-12 18:27:19.000000000 -0800 @@ -650,6 +650,7 @@ void *prior; void **object = (void *)x; unsigned long flags; + struct active_slab *a; if (!object) return; @@ -669,8 +670,20 @@ #endif local_irq_save(flags); + a = ACTIVE_SLAB(s, smp_processor_id()); + if (a->page == page) { + void **object = x; + + a->nr_free++; + object[s->offset] = a->freelist; + a->freelist = object; + local_irq_restore(flags); + return; + } + if (unlikely(PageSlabsingle(page))) goto single_object_slab; + slab_lock(page); #ifdef SLAB_DEBUG_KFREE