From: "Luke Yang" The earlier patch to consolidate mmu and nommu page allocation and refcounting by using compound pages for nommu allocations had a bug: kmalloc slabs who's pages were initially allocated by a non-__GFP_COMP allocator could be passed into mm/nommu.c kmalloc allocations which really wanted __GFP_COMP underlying pages. Fix that by having nommu pass __GFP_COMP to all higher order slab allocations. Signed-off-by: Luke Yang Acked-by: Nick Piggin Signed-off-by: Andrew Morton --- mm/slab.c | 7 +++++++ 1 files changed, 7 insertions(+) diff -puN mm/slab.c~nommu-use-compound-page-in-slab-allocator mm/slab.c --- devel/mm/slab.c~nommu-use-compound-page-in-slab-allocator 2006-04-05 21:28:06.000000000 -0700 +++ devel-akpm/mm/slab.c 2006-04-05 21:28:06.000000000 -0700 @@ -1456,7 +1456,14 @@ static void *kmem_getpages(struct kmem_c int i; flags |= cachep->gfpflags; +#ifndef CONFIG_MMU + /* nommu uses slab's for process anonymous memory allocations, so + * requires __GFP_COMP to properly refcount higher order allocations" + */ + page = alloc_pages_node(nodeid, (flags | __GFP_COMP), cachep->gfporder); +#else page = alloc_pages_node(nodeid, flags, cachep->gfporder); +#endif if (!page) return NULL; addr = page_address(page); _