Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

vlan: propagate gso_max_segs

vlan drivers lack proper propagation of gso_max_segs from
lower device.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Eric Dumazet and committed by
David S. Miller
f6773c5e b4ab9d76

+6
+2
drivers/net/ipvlan/ipvlan_main.c
··· 119 119 dev->features = phy_dev->features & IPVLAN_FEATURES; 120 120 dev->features |= NETIF_F_LLTX; 121 121 dev->gso_max_size = phy_dev->gso_max_size; 122 + dev->gso_max_segs = phy_dev->gso_max_segs; 122 123 dev->hard_header_len = phy_dev->hard_header_len; 123 124 124 125 ipvlan_set_lockdep_class(dev); ··· 593 592 list_for_each_entry(ipvlan, &port->ipvlans, pnode) { 594 593 ipvlan->dev->features = dev->features & IPVLAN_FEATURES; 595 594 ipvlan->dev->gso_max_size = dev->gso_max_size; 595 + ipvlan->dev->gso_max_segs = dev->gso_max_segs; 596 596 netdev_features_change(ipvlan->dev); 597 597 } 598 598 break;
+2
drivers/net/macvlan.c
··· 803 803 dev->hw_features |= NETIF_F_LRO; 804 804 dev->vlan_features = lowerdev->vlan_features & MACVLAN_FEATURES; 805 805 dev->gso_max_size = lowerdev->gso_max_size; 806 + dev->gso_max_segs = lowerdev->gso_max_segs; 806 807 dev->hard_header_len = lowerdev->hard_header_len; 807 808 808 809 macvlan_set_lockdep_class(dev); ··· 1533 1532 case NETDEV_FEAT_CHANGE: 1534 1533 list_for_each_entry(vlan, &port->vlans, list) { 1535 1534 vlan->dev->gso_max_size = dev->gso_max_size; 1535 + vlan->dev->gso_max_segs = dev->gso_max_segs; 1536 1536 netdev_update_features(vlan->dev); 1537 1537 } 1538 1538 break;
+1
net/8021q/vlan.c
··· 311 311 struct vlan_dev_priv *vlan = vlan_dev_priv(vlandev); 312 312 313 313 vlandev->gso_max_size = dev->gso_max_size; 314 + vlandev->gso_max_segs = dev->gso_max_segs; 314 315 315 316 if (vlan_hw_offload_capable(dev->features, vlan->vlan_proto)) 316 317 vlandev->hard_header_len = dev->hard_header_len;
+1
net/8021q/vlan_dev.c
··· 551 551 dev->features |= real_dev->vlan_features | NETIF_F_LLTX | 552 552 NETIF_F_GSO_SOFTWARE; 553 553 dev->gso_max_size = real_dev->gso_max_size; 554 + dev->gso_max_segs = real_dev->gso_max_segs; 554 555 if (dev->features & NETIF_F_VLAN_FEATURES) 555 556 netdev_warn(real_dev, "VLAN features are set incorrectly. Q-in-Q configurations may not work correctly.\n"); 556 557