slub: Add kmalloc_large_node() to support kmalloc_node fallback
Slub is missing some NUMA support for large kmallocs. Provide that. Reviewed-by: Pekka Enberg <penberg@cs.helsinki.fi> Signed-off-by: Christoph Lameter <clameter@sgi.com>
This commit is contained in:
parent
7693143481
commit
f619cfe1bd
1 changed files with 13 additions and 2 deletions
15
mm/slub.c
15
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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue