tuntap: add missing xdp flush
authorJason Wang <jasowang@redhat.com>
Wed, 7 Feb 2018 09:14:46 +0000 (17:14 +0800)
committerDavid S. Miller <davem@davemloft.net>
Thu, 8 Feb 2018 19:10:30 +0000 (14:10 -0500)
commit762c330d670e3d4b795cf7a8d761866fdd1eef49
tree249dbef044fc3ecf0b3f2d449e63080e9f802359
parentcb9f7a9a5c96a773bbc9c70660dc600cfff82f82
tuntap: add missing xdp flush

When using devmap to redirect packets between interfaces,
xdp_do_flush() is usually a must to flush any batched
packets. Unfortunately this is missed in current tuntap
implementation.

Unlike most hardware driver which did XDP inside NAPI loop and call
xdp_do_flush() at then end of each round of poll. TAP did it in the
context of process e.g tun_get_user(). So fix this by count the
pending redirected packets and flush when it exceeds NAPI_POLL_WEIGHT
or MSG_MORE was cleared by sendmsg() caller.

With this fix, xdp_redirect_map works again between two TAPs.

Fixes: 761876c857cb ("tap: XDP support")
Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/tun.c