Now that we have the build_skb paths using local NAPI cache, use napi_consume_skb in tun_do_read, so that the local cache gets refilled on read. This is especially useful in the vhost worker use case where the RX and TX paths are running on the same worker kthread. Signed-off-by: Jon Kohler <jon@xxxxxxxxxxx> --- drivers/net/tun.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 7b13d4bf5374..f85115383667 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -2163,10 +2163,13 @@ static ssize_t tun_do_read(struct tun_struct *tun, struct tun_file *tfile, struct sk_buff *skb = ptr; ret = tun_put_user(tun, tfile, skb, to); - if (unlikely(ret < 0)) + if (ret >= 0) { + local_bh_disable(); + napi_consume_skb(skb, 1); + local_bh_enable(); + } else { kfree_skb(skb); - else - consume_skb(skb); + } } return ret; -- 2.43.0