Index: linux-2.6.21-rc6/mm/slub.c =================================================================== --- linux-2.6.21-rc6.orig/mm/slub.c 2007-04-20 22:30:35.000000000 -0700 +++ linux-2.6.21-rc6/mm/slub.c 2007-04-20 22:31:20.000000000 -0700 @@ -777,7 +777,7 @@ static struct page *allocate_slab(struct } static void setup_object(struct kmem_cache *s, struct page *page, - void *object) + void *object, gfp_t flags) { if (PageError(page)) { init_object(s, object, 0); @@ -787,7 +787,7 @@ static void setup_object(struct kmem_cac if (unlikely(s->ctor)) { int mode = SLAB_CTOR_CONSTRUCTOR; - if (!(s->flags & __GFP_WAIT)) + if (!(flags & __GFP_WAIT)) mode |= SLAB_CTOR_ATOMIC; s->ctor(object, s, mode); @@ -833,11 +833,11 @@ static struct page *new_slab(struct kmem last = start; for (p = start + s->size; p < end; p += s->size) { - setup_object(s, page, last); + setup_object(s, page, last, flags); set_freepointer(s, last, p); last = p; } - setup_object(s, page, last); + setup_object(s, page, last, flags); set_freepointer(s, last, NULL); page->freelist = start;