linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 net-next] net: skb_vlan_untag(): don't reset transport offset if set by GRO layer
@ 2020-11-09 23:47 Alexander Lobakin
  2020-11-10  4:05 ` Jakub Kicinski
  2020-11-10  4:20 ` patchwork-bot+netdevbpf
  0 siblings, 2 replies; 3+ messages in thread
From: Alexander Lobakin @ 2020-11-09 23:47 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski
  Cc: Eric Dumazet, Miaohe Lin, Martin Varghese, Pravin B Shelar,
	Willem de Bruijn, Guillaume Nault, Al Viro, Florian Westphal,
	Steffen Klassert, Paolo Abeni, Yadu Kishore, Vladimir Oltean,
	Alexander Lobakin, netdev, linux-kernel

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(-)

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;
-- 
2.29.2



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v2 net-next] net: skb_vlan_untag(): don't reset transport offset if set by GRO layer
  2020-11-09 23:47 [PATCH v2 net-next] net: skb_vlan_untag(): don't reset transport offset if set by GRO layer Alexander Lobakin
@ 2020-11-10  4:05 ` Jakub Kicinski
  2020-11-10  4:20 ` patchwork-bot+netdevbpf
  1 sibling, 0 replies; 3+ messages in thread
From: Jakub Kicinski @ 2020-11-10  4:05 UTC (permalink / raw)
  To: Alexander Lobakin
  Cc: David S. Miller, Eric Dumazet, Miaohe Lin, Martin Varghese,
	Pravin B Shelar, Willem de Bruijn, Guillaume Nault, Al Viro,
	Florian Westphal, Steffen Klassert, Paolo Abeni, Yadu Kishore,
	Vladimir Oltean, netdev, linux-kernel

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!

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v2 net-next] net: skb_vlan_untag(): don't reset transport offset if set by GRO layer
  2020-11-09 23:47 [PATCH v2 net-next] net: skb_vlan_untag(): don't reset transport offset if set by GRO layer Alexander Lobakin
  2020-11-10  4:05 ` Jakub Kicinski
@ 2020-11-10  4:20 ` patchwork-bot+netdevbpf
  1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+netdevbpf @ 2020-11-10  4:20 UTC (permalink / raw)
  To: Alexander Lobakin
  Cc: davem, kuba, edumazet, linmiaohe, martin.varghese, pshelar,
	willemb, gnault, viro, fw, steffen.klassert, pabeni,
	kyk.segfault, vladimir.oltean, netdev, linux-kernel

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



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-11-10  4:20 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-09 23:47 [PATCH v2 net-next] net: skb_vlan_untag(): don't reset transport offset if set by GRO layer Alexander Lobakin
2020-11-10  4:05 ` Jakub Kicinski
2020-11-10  4:20 ` patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).