diff options
| author | Wang Zhan <wang.zhan@smartx.com> | 2026-10-08 18:06:46 +0800 |
|---|---|---|
| committer | Paolo Abeni <pabeni@redhat.com> | 2026-10-13 15:32:47 +0200 |
| commit | cc9dcb0e7a428ca43259bbee3350d786681265a3 (patch) | |
| tree | b302a26c736f85734b6076fcafd6b71d4f0a7852 /include/linux | |
| parent | 59e344304c1a80fb9898223020cf3b10ed3a0da4 (diff) | |
| download | linux-cc9dcb0e7a428ca43259bbee3350d786681265a3.tar.gz linux-cc9dcb0e7a428ca43259bbee3350d786681265a3.zip | |
net: core: use the packet's L3 protocol for the GSO size limit
gso_features_check() compares the frame length against
netif_get_gso_max_size(), which picks the IPv4 or the IPv6 limit from
skb->protocol. A tag which is already inside the frame replaces that field
with the VLAN ethertype, as skb_vlan_push() does, and an IPv6 packet is
then measured against the IPv4 limit and segmented although the device
could send it as one TSO frame.
The lookup moves from netdevice.h into dev.c: vlan_get_protocol() reads the
L3 protocol from behind an in-frame tag, while if_vlan.h includes
netdevice.h, so an inline in that header cannot call it. dev.c is the only
file which calls the lookup, so it becomes a static helper there.
Reviewed-by: Willem de Bruijn <willemb@google.com>
Assisted-by: LLM
Signed-off-by: Wang Zhan <wang.zhan@smartx.com>
Link: https://patch.msgid.link/20261008100651.2534957-2-wang.zhan@smartx.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/netdevice.h | 9 |
1 files changed, 0 insertions, 9 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 5b4b92e76b67..1743dcd02d5b 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -5566,15 +5566,6 @@ netif_get_gro_max_size(const struct net_device *dev, const struct sk_buff *skb) READ_ONCE(dev->gro_ipv4_max_size); } -static inline unsigned int -netif_get_gso_max_size(const struct net_device *dev, const struct sk_buff *skb) -{ - /* pairs with WRITE_ONCE() in netif_set_gso(_ipv4)_max_size() */ - return skb->protocol == htons(ETH_P_IPV6) ? - READ_ONCE(dev->gso_max_size) : - READ_ONCE(dev->gso_ipv4_max_size); -} - static inline bool netif_is_macsec(const struct net_device *dev) { return dev->priv_flags & IFF_MACSEC; |
