Messages in this thread Patch in this message | | | Date | Fri, 15 May 2020 19:17:36 -0700 | Subject | [PATCH] net/packet: simply allocations in alloc_one_pg_vec_page | From | Shakeel Butt <> |
| |
Currently the initial allocation for pg_vec buffers are done through page allocator with __GFP_NORETRY, the first fallbacks is vzalloc and the second fallback is page allocator without __GFP_NORETRY.
First, there is no need to do vzalloc if the order is 0 and second the vzalloc internally use GFP_KERNEL for each individual page allocation and thus there is no need to have any fallback after vzalloc.
Signed-off-by: Shakeel Butt <shakeelb@google.com> --- net/packet/af_packet.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-)
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 29bd405adbbd..d6f96b9f5b01 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -4243,19 +4243,12 @@ static char *alloc_one_pg_vec_page(unsigned long order) if (buffer) return buffer; - /* __get_free_pages failed, fall back to vmalloc */ - buffer = vzalloc(array_size((1 << order), PAGE_SIZE)); - if (buffer) - return buffer; + /* __get_free_pages failed, fall back to vmalloc for high order. */ + if (order) + return vzalloc(array_size((1 << order), PAGE_SIZE)); - /* vmalloc failed, lets dig into swap here */ gfp_flags &= ~__GFP_NORETRY; - buffer = (char *) __get_free_pages(gfp_flags, order); - if (buffer) - return buffer; - - /* complete and utter failure */ - return NULL; + return (char *)__get_free_pages(gfp_flags, order); } static struct pgv *alloc_pg_vec(struct tpacket_req *req, int order) -- 2.26.2.761.g0e0b3e54be-goog
| |