Message ID | 7JgIkgEztzt0W6ZtC9V9Cnk5qfkrUFYcpN871syCi8@cp4-web-040.plabs.ch |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [v2,net-next] net: skb_vlan_untag(): don't reset transport offset if set by GRO layer | expand |
Context | Check | Description |
---|---|---|
jkicinski/cover_letter | success | Link |
jkicinski/fixes_present | success | Link |
jkicinski/patch_count | success | Link |
jkicinski/tree_selection | success | Clearly marked for net-next |
jkicinski/subject_prefix | success | Link |
jkicinski/source_inline | success | Was 0 now: 0 |
jkicinski/verify_signedoff | success | Link |
jkicinski/module_param | success | Was 0 now: 0 |
jkicinski/build_32bit | success | Errors and warnings before: 1 this patch: 1 |
jkicinski/kdoc | success | Errors and warnings before: 0 this patch: 0 |
jkicinski/verify_fixes | success | Link |
jkicinski/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 9 lines checked |
jkicinski/build_allmodconfig_warn | success | Errors and warnings before: 1 this patch: 1 |
jkicinski/header_inline | success | Link |
jkicinski/stable | success | Stable not CCed |
On Mon, 09 Nov 2020 23:47:23 +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. > > 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> Applied, thanks!
Hello: This patch was applied to netdev/net-next.git (refs/heads/master): On Mon, 09 Nov 2020 23:47:23 +0000 you 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. > > [...] Here is the summary with links: - [v2,net-next] net: skb_vlan_untag(): don't reset transport offset if set by GRO layer https://git.kernel.org/netdev/net-next/c/8be33ecfc1ff You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 1ba8f0163744..aa3d2828b7a2 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -5430,7 +5430,8 @@ struct sk_buff *skb_vlan_untag(struct sk_buff *skb) goto err_free; skb_reset_network_header(skb); - skb_reset_transport_header(skb); + if (!skb_transport_header_was_set(skb)) + skb_reset_transport_header(skb); skb_reset_mac_len(skb); return skb;
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. 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> --- net/core/skbuff.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)