Commit 3464645a authored by Mike Waychison's avatar Mike Waychison Committed by David S. Miller

virtio_net: Pass gfp flags when allocating rx buffers.

Currently, the refill path for RX buffers will always allocate the
buffers as GFP_ATOMIC, even if we are in process context.  This will
fail to apply memory pressure as the worker thread will not contribute
to the freeing of memory.

Fix this by changing add_recvbuf_small to use the gfp variant allocator,
__netdev_alloc_skb_ip_align().
Signed-off-by: default avatarMike Waychison <mikew@google.com>
Acked-by: default avatarRusty Russell <rusty@rustcorp.com.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ea81875a
...@@ -156,6 +156,7 @@ static void set_skb_frag(struct sk_buff *skb, struct page *page, ...@@ -156,6 +156,7 @@ static void set_skb_frag(struct sk_buff *skb, struct page *page,
*len -= size; *len -= size;
} }
/* Called from bottom half context */
static struct sk_buff *page_to_skb(struct virtnet_info *vi, static struct sk_buff *page_to_skb(struct virtnet_info *vi,
struct page *page, unsigned int len) struct page *page, unsigned int len)
{ {
...@@ -358,7 +359,7 @@ static int add_recvbuf_small(struct virtnet_info *vi, gfp_t gfp) ...@@ -358,7 +359,7 @@ static int add_recvbuf_small(struct virtnet_info *vi, gfp_t gfp)
struct skb_vnet_hdr *hdr; struct skb_vnet_hdr *hdr;
int err; int err;
skb = netdev_alloc_skb_ip_align(vi->dev, MAX_PACKET_LEN); skb = __netdev_alloc_skb_ip_align(vi->dev, MAX_PACKET_LEN, gfp);
if (unlikely(!skb)) if (unlikely(!skb))
return -ENOMEM; return -ENOMEM;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment