On Thu, 05 Nov 2020 21:29:01 +0000 Alexander Lobakin wrote: > Similar to commit fda55eca5a33f > ("net: introduce skb_transport_header_was_set()"), avoid resetting > transport offsets that were already set by GRO layer. This not only > mirrors the behavior of __netif_receive_skb_core(), but also makes > sense when it comes to UDP GSO fraglists forwarding: transport offset > of such skbs is set only once by GRO receive callback and remains > untouched and correct up to the xmitting driver in 1:1 case, but > becomes junk after untagging in ingress VLAN case and breaks UDP > GSO offload. This does not happen after this change, and all types > of forwarding of UDP GSO fraglists work as expected. > > Signed-off-by: Alexander Lobakin <aloba...@pm.me> > --- > net/core/skbuff.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/net/core/skbuff.c b/net/core/skbuff.c > index c5e6c0b83a92..39c13b9cf79d 100644 > --- a/net/core/skbuff.c > +++ b/net/core/skbuff.c > @@ -5441,9 +5441,11 @@ struct sk_buff *skb_vlan_untag(struct sk_buff *skb) > goto err_free; > > skb_reset_network_header(skb); > - skb_reset_transport_header(skb); > skb_reset_mac_len(skb); > > + if (!skb_transport_header_was_set(skb)) > + skb_reset_transport_header(skb); > +
Patch looks fine, thanks, but I don't understand why you decided to move the reset? It's not like it's not in order of headers, either. Let's keep the series of resets identical to __netif_receive_skb_core(), shall we? > return skb; > > err_free: