diff options
author | Jakub Kicinski <kuba@kernel.org> | 2022-11-11 04:43:53 +0300 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2022-11-11 04:43:53 +0300 |
commit | 966a9b49033b472dcfb453abdc34bca7df17adce (patch) | |
tree | c47919dd0be3db0d04bb272e39eee209de355eac /drivers/net/tun.c | |
parent | c1b05105573b2cd5845921eb0d2caa26e2144a34 (diff) | |
parent | 4bbf3422df78029f03161640dcb1e9d1ed64d1ea (diff) | |
download | linux-966a9b49033b472dcfb453abdc34bca7df17adce.tar.xz |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
drivers/net/can/pch_can.c
ae64438be192 ("can: dev: fix skb drop check")
1dd1b521be85 ("can: remove obsolete PCH CAN driver")
https://lore.kernel.org/all/20221110102509.1f7d63cc@canb.auug.org.au/
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'drivers/net/tun.c')
-rw-r--r-- | drivers/net/tun.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 0718e39117a8..addef005ba37 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -1967,17 +1967,25 @@ drop: skb_headlen(skb)); if (unlikely(headlen > skb_headlen(skb))) { + WARN_ON_ONCE(1); + err = -ENOMEM; dev_core_stats_rx_dropped_inc(tun->dev); +napi_busy: napi_free_frags(&tfile->napi); rcu_read_unlock(); mutex_unlock(&tfile->napi_mutex); - WARN_ON(1); - return -ENOMEM; + return err; } - local_bh_disable(); - napi_gro_frags(&tfile->napi); - local_bh_enable(); + if (likely(napi_schedule_prep(&tfile->napi))) { + local_bh_disable(); + napi_gro_frags(&tfile->napi); + napi_complete(&tfile->napi); + local_bh_enable(); + } else { + err = -EBUSY; + goto napi_busy; + } mutex_unlock(&tfile->napi_mutex); } else if (tfile->napi_enabled) { struct sk_buff_head *queue = &tfile->sk.sk_write_queue; |