Message ID | hjGOh0iCOYyo1FPiZh6TMXcx3YCgNs1T1eGKLrDz8@cp4-web-037.plabs.ch (mailing list archive) |
---|---|
Headers | show |
Series | net: udp: fix Fast/frag0 UDP GRO | expand |
On Wed, 11 Nov 2020 20:44:08 +0000 Alexander Lobakin wrote: > While testing UDP GSO fraglists forwarding through driver that uses > Fast GRO (via napi_gro_frags()), I was observing lots of out-of-order > iperf packets: > > [ ID] Interval Transfer Bitrate Jitter > [SUM] 0.0-40.0 sec 12106 datagrams received out-of-order > > Simple switch to napi_gro_receive() or any other method without frag0 > shortcut completely resolved them. > > I've found two incorrect header accesses in GRO receive callback(s): > - udp_hdr() (instead of udp_gro_udphdr()) that always points to junk > in "fast" mode and could probably do this in "regular". > This was the actual bug that caused all out-of-order delivers; > - udp{4,6}_lib_lookup_skb() -> ip{,v6}_hdr() (instead of > skb_gro_network_header()) that potentionally might return odd > pointers in both modes. > > Each patch addresses one of these two issues. > > This doesn't cover a support for nested tunnels as it's out of the > subject and requires more invasive changes. It will be handled > separately in net-next series. Applied, thanks!