udp: properly flush normal packet at GRO time
If an UDP packet enters the GRO engine but is not eligible for aggregation and is not targeting an UDP tunnel, udp_gro_receive() will not set the flush bit, and packet could delayed till the next napi flush. Fix the issue ensuring non GROed packets traverse skb_gro_flush_final(). Reported-and-tested-by: Matthias Treydte <mt@waldheinz.de> Fixes: 18f25dc39990 ("udp: skip L4 aggregation for UDP tunnel packets") Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b22580233d
commit
b43c8909be
@ -525,8 +525,10 @@ struct sk_buff *udp_gro_receive(struct list_head *head, struct sk_buff *skb,
|
||||
|
||||
if ((!sk && (skb->dev->features & NETIF_F_GRO_UDP_FWD)) ||
|
||||
(sk && udp_sk(sk)->gro_enabled) || NAPI_GRO_CB(skb)->is_flist)
|
||||
pp = call_gro_receive(udp_gro_receive_segment, head, skb);
|
||||
return pp;
|
||||
return call_gro_receive(udp_gro_receive_segment, head, skb);
|
||||
|
||||
/* no GRO, be sure flush the current packet */
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (NAPI_GRO_CB(skb)->encap_mark ||
|
||||
|
Loading…
x
Reference in New Issue
Block a user