net: make sure net_rx_action() calls skb_defer_free_flush()

I missed a stray return; in net_rx_action(), which very well
is taken whenever trigger_rx_softirq() has been called on
a cpu that is no longer receiving network packets,
or receiving too few of them.

Fixes: 68822bdf76 ("net: generalize skb freeing deferral to per-cpu lists")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: Ido Schimmel <idosch@nvidia.com>
Tested-by: Ido Schimmel <idosch@nvidia.com>
Link: https://lore.kernel.org/r/20220427204147.1310161-1-eric.dumazet@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
Eric Dumazet 2022-04-27 13:41:47 -07:00 коммит произвёл Paolo Abeni
Родитель be5fd933f8
Коммит f3412b3879
1 изменённых файлов: 2 добавлений и 1 удалений

Просмотреть файл

@ -6617,7 +6617,7 @@ static __latent_entropy void net_rx_action(struct softirq_action *h)
if (list_empty(&list)) { if (list_empty(&list)) {
if (!sd_has_rps_ipi_waiting(sd) && list_empty(&repoll)) if (!sd_has_rps_ipi_waiting(sd) && list_empty(&repoll))
return; goto end;
break; break;
} }
@ -6644,6 +6644,7 @@ static __latent_entropy void net_rx_action(struct softirq_action *h)
__raise_softirq_irqoff(NET_RX_SOFTIRQ); __raise_softirq_irqoff(NET_RX_SOFTIRQ);
net_rps_action_and_irq_enable(sd); net_rps_action_and_irq_enable(sd);
end:
skb_defer_free_flush(sd); skb_defer_free_flush(sd);
} }