Allocations over KMALLOC_MAX_SIZE could be served only by vmalloc. Signed-off-by: Konstantin Khlebnikov <khlebnikov@xxxxxxxxxxxxxx> --- mm/util.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mm/util.c b/mm/util.c index 8bf08b5b5760..f5f04fa22814 100644 --- a/mm/util.c +++ b/mm/util.c @@ -392,6 +392,9 @@ void *kvmalloc_node(size_t size, gfp_t flags, int node) gfp_t kmalloc_flags = flags; void *ret; + if (size > KMALLOC_MAX_SIZE) + goto fallback; + /* * vmalloc uses GFP_KERNEL for some internal allocations (e.g page tables) * so the given set of flags has to be compatible. @@ -422,6 +425,7 @@ void *kvmalloc_node(size_t size, gfp_t flags, int node) if (ret || size <= PAGE_SIZE) return ret; +fallback: return __vmalloc_node_flags_caller(size, node, flags, __builtin_return_address(0)); }