From ed3473955c4745ef6b36bdda229afc685bfd5233 Mon Sep 17 00:00:00 2001 From: Christoph Lameter Date: Sat, 1 Mar 2008 13:56:40 -0800 Subject: [PATCH] --- yaml --- r: 86686 b: refs/heads/master c: f619cfe1bda809a97c407f4c723eb3235ecd64e5 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/mm/slub.c | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index fb67026a5e7c..021e9bddebf9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7693143481730686362cc6360e3d47c012d9b2c8 +refs/heads/master: f619cfe1bda809a97c407f4c723eb3235ecd64e5 diff --git a/trunk/mm/slub.c b/trunk/mm/slub.c index db8026ba049f..ecacacdce9d7 100644 --- a/trunk/mm/slub.c +++ b/trunk/mm/slub.c @@ -2592,13 +2592,24 @@ void *__kmalloc(size_t size, gfp_t flags) } EXPORT_SYMBOL(__kmalloc); +static void *kmalloc_large_node(size_t size, gfp_t flags, int node) +{ + struct page *page = alloc_pages_node(node, flags | __GFP_COMP, + get_order(size)); + + if (page) + return page_address(page); + else + return NULL; +} + #ifdef CONFIG_NUMA void *__kmalloc_node(size_t size, gfp_t flags, int node) { struct kmem_cache *s; if (unlikely(size > PAGE_SIZE)) - return kmalloc_large(size, flags); + return kmalloc_large_node(size, flags, node); s = get_slab(size, flags); @@ -3146,7 +3157,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags, struct kmem_cache *s; if (unlikely(size > PAGE_SIZE)) - return kmalloc_large(size, gfpflags); + return kmalloc_large_node(size, gfpflags, node); s = get_slab(size, gfpflags);