--- mm/slub.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) Index: linux-2.6/mm/slub.c =================================================================== --- linux-2.6.orig/mm/slub.c 2007-10-18 12:28:07.000000000 -0700 +++ linux-2.6/mm/slub.c 2007-10-18 12:30:03.000000000 -0700 @@ -1291,12 +1291,14 @@ static void add_partial(struct kmem_cach struct kmem_cache_node *n = get_node(s, page_to_nid(page)); unsigned long flags; + if (SlabFrozen(page)) + return; spin_lock_irqsave(&n->list_lock, flags); if (SlabFull(page)) { list_del(&page->lru); ClearSlabFull(page); } - if (!SlabPartial(page)) { + if (!SlabPartial(page) && !SlabFrozen(page)) { SetSlabPartial(page); n->nr_partial++; if (tail) @@ -1689,9 +1691,6 @@ checks_ok: prior = object[offset] = page->freelist; page->freelist = object; - if (unlikely(SlabFrozen(page))) - goto out_unlock; - /* * The slab is now guaranteed to have free objects. * We may have to move it to the partial list.