]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
virtio-net: correctly transmit XDP buff after linearizing
authorJason Wang <jasowang@redhat.com>
Tue, 22 May 2018 03:44:29 +0000 (11:44 +0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 23 May 2018 17:36:19 +0000 (13:36 -0400)
We should not go for the error path after successfully transmitting a
XDP buffer after linearizing. Since the error path may try to pop and
drop next packet and increase the drop counters. Fixing this by simply
drop the refcnt of original page and go for xmit path.

Fixes: 72979a6c3590 ("virtio_net: xdp, add slowpath case for non contiguous buffers")
Cc: John Fastabend <john.fastabend@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 c15d240f643f7d9d5975c6c48c14969cd85ff455..6260d6549ee8b66ae41d404df6a9eda279e4dac2 100644 (file)
@@ -775,7 +775,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;
                case XDP_REDIRECT: