Index: linux-2.6.21-rc1/mm/slub.c =================================================================== --- linux-2.6.21-rc1.orig/mm/slub.c 2007-02-25 22:33:09.000000000 -0800 +++ linux-2.6.21-rc1/mm/slub.c 2007-02-25 23:25:37.000000000 -0800 @@ -82,6 +82,8 @@ #define ARCH_SLAB_MINALIGN sizeof(void *) #endif +#define KMEM_CACHE_SIZE (sizeof(struct kmem_cache) - \ + (MAX_NUMNODES - nr_cpu_ids) * sizeof(struct page *)) /* * Forward declarations */ @@ -985,7 +987,7 @@ void (*dtor)(void *, struct kmem_cache *, unsigned long)) { BUG_ON(flags & SLUB_UNIMPLEMENTED); - memset(s, 0, sizeof(struct kmem_cache)); + memset(s, 0, KMEM_CACHE_SIZE); s->name = name; s->ctor = ctor; s->dtor = dtor; @@ -1265,7 +1267,7 @@ flags &= ~__GFP_DMA; /* Dynamically create dma cache */ - x = kmalloc(sizeof(struct kmem_cache), flags); + x = kmalloc(KMEM_CACHE_SIZE, flags); if (!x) panic("Unable to allocate memory for dma cache\n"); @@ -1459,7 +1461,7 @@ return kmem_cache_dup(s, GFP_KERNEL, name); } - s = kmalloc(sizeof(struct kmem_cache), GFP_KERNEL); + s = kmalloc(KMEM_CACHE_SIZE, GFP_KERNEL); if (s && kmem_cache_open(s, GFP_KERNEL, name, size, align, flags, ctor, dtor)) return s;