]> git.baikalelectronics.ru Git - kernel.git/commit
net: skb_vlan_untag(): don't reset transport offset if set by GRO layer
authorAlexander Lobakin <alobakin@pm.me>
Mon, 9 Nov 2020 23:47:23 +0000 (23:47 +0000)
committerJakub Kicinski <kuba@kernel.org>
Tue, 10 Nov 2020 04:03:55 +0000 (20:03 -0800)
commit0ab7e8e2e31e69843ce7182c2d56a5ac1cb6592e
tree11bfd38c3ac7b92136663f5699867b3325141f29
parent5926d4e41eec73bb1dedfd259da3166288aca845
net: skb_vlan_untag(): don't reset transport offset if set by GRO layer

Similar to commit 155dfb67ddf5c
("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.

Since v1 [1]:
 - keep the code 1:1 with __netif_receive_skb_core() (Jakub).

[1] https://lore.kernel.org/netdev/zYurwsZRN7BkqSoikWQLVqHyxz18h4LhHU4NFa2Vw@cp4-web-038.plabs.ch

Signed-off-by: Alexander Lobakin <alobakin@pm.me>
Link: https://lore.kernel.org/r/7JgIkgEztzt0W6ZtC9V9Cnk5qfkrUFYcpN871syCi8@cp4-web-040.plabs.ch
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/skbuff.c