Commit c93bdd0e03e8 ("netvm: allow skb allocation to use PFMEMALLOC reserves") removed memory allocation failure message in cases when pfmemalloc reserves are not allowed to use. Warning makes easier to observe network performance issues which might happen due to allocation failures.
So remove __GFP_NOWARN unless we can use fallback allocation with __GFP_MEMALLOC. Also remove __GFP_NOMEMALLOC when usage of memory reserves isn't allowed. Many allocations on receive path use plain GFP_ATOMIC without __GFP_NOMEMALLOC. Such allocations have greater chance to succeed because plain GFP_ATOMIC can use 1/4 of memory reserves, while GFP_ATOMIC|__GFP_NOMEMALLOC can't. So it's seems more reasonable to use GFP_ATOMIC all across receive path so all allocations have similar chance of succeeding. https://pmc.acronis.com/browse/VSTOR-21390 Signed-off-by: Andrey Ryabinin <aryabi...@virtuozzo.com> --- net/core/skbuff.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 41119848f240..403ec8cbf365 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -156,14 +156,16 @@ static void *__kmalloc_reserve(size_t size, gfp_t flags, int node, { void *obj; bool ret_pfmemalloc = false; + gfp_t alloc_flags = flags; /* * Try a regular allocation, when that fails and we're not entitled * to the reserves, fail. */ - obj = kmalloc_node_track_caller(size, - flags | __GFP_NOMEMALLOC | __GFP_NOWARN, - node); + if (gfp_pfmemalloc_allowed(flags)) + alloc_flags |= __GFP_NOMEMALLOC | __GFP_NOWARN; + + obj = kmalloc_node_track_caller(size, alloc_flags, node); if (obj || !(gfp_pfmemalloc_allowed(flags))) goto out; -- 2.21.0 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel