virtio-net: correctly redirect linearized packet
authorJason Wang <jasowang@redhat.com>
Tue, 22 May 2018 03:44:28 +0000 (11:44 +0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 23 May 2018 17:36:19 +0000 (13:36 -0400)
After a linearized packet was redirected by XDP, we should not go for
the err path which will try to pop buffers for the next packet and
increase the drop counter. Fixing this by just drop the page refcnt
for the original page.

Fixes: 186b3c998c50 ("virtio-net: support XDP_REDIRECT")
Reported-by: David Ahern <dsahern@gmail.com>
Tested-by: David Ahern <dsahern@gmail.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/virtio_net.c

index 770422e953f75e1e9a1bb3a317d83f8070e6ae36..c15d240f643f7d9d5975c6c48c14969cd85ff455 100644 (file)
@@ -787,7 +787,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
                        }
                        *xdp_xmit = true;
                        if (unlikely(xdp_page != page))
-                               goto err_xdp;
+                               put_page(page);
                        rcu_read_unlock();
                        goto xdp_xmit;
                default: