Hi all, 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. Thanks Nick! Signed-off-by: Luke Yang Acked-by: Nick Piggin slab.c | 7 +++++++ 1 files changed, 7 insertions(+) diff --git a/mm/slab.c b/mm/slab.c index 4cbf8bb..5a782ff 100644 --- a/mm/slab.c +++ b/mm/slab.c @@ -1454,7 +1454,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); -- Best regards, Luke Yang, Kernel for Blackfin maintainer luke.adi@gmail.com