[PATCH net 1/4] virtio-net: correctly redirect linearized packet

2018-05-21 Thread Jason Wang
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 
Tested-by: David Ahern 
Signed-off-by: Jason Wang 
---
 drivers/net/virtio_net.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 770422e..c15d240 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -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:
-- 
2.7.4



Re: [PATCH net 1/4] virtio-net: correctly redirect linearized packet

2018-05-21 Thread Michael S. Tsirkin
On Mon, May 21, 2018 at 04:35:03PM +0800, Jason Wang wrote:
> 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 
> Tested-by: David Ahern 
> Signed-off-by: Jason Wang 

Acked-by: Michael S. Tsirkin 

> ---
>  drivers/net/virtio_net.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> index 770422e..c15d240 100644
> --- a/drivers/net/virtio_net.c
> +++ b/drivers/net/virtio_net.c
> @@ -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:
> -- 
> 2.7.4