diff options
-rw-r--r-- | include/linux/netdevice.h | 2 | ||||
-rw-r--r-- | net/core/dev.c | 4 |
2 files changed, 6 insertions, 0 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index eb06e58bed0b..a9db4f33407f 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -1300,6 +1300,8 @@ struct net_device { | |||
1300 | /* for setting kernel sock attribute on TCP connection setup */ | 1300 | /* for setting kernel sock attribute on TCP connection setup */ |
1301 | #define GSO_MAX_SIZE 65536 | 1301 | #define GSO_MAX_SIZE 65536 |
1302 | unsigned int gso_max_size; | 1302 | unsigned int gso_max_size; |
1303 | #define GSO_MAX_SEGS 65535 | ||
1304 | u16 gso_max_segs; | ||
1303 | 1305 | ||
1304 | #ifdef CONFIG_DCB | 1306 | #ifdef CONFIG_DCB |
1305 | /* Data Center Bridging netlink ops */ | 1307 | /* Data Center Bridging netlink ops */ |
diff --git a/net/core/dev.c b/net/core/dev.c index 0cb3fe8d8e72..f91abf800161 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -2134,6 +2134,9 @@ netdev_features_t netif_skb_features(struct sk_buff *skb) | |||
2134 | __be16 protocol = skb->protocol; | 2134 | __be16 protocol = skb->protocol; |
2135 | netdev_features_t features = skb->dev->features; | 2135 | netdev_features_t features = skb->dev->features; |
2136 | 2136 | ||
2137 | if (skb_shinfo(skb)->gso_segs > skb->dev->gso_max_segs) | ||
2138 | features &= ~NETIF_F_GSO_MASK; | ||
2139 | |||
2137 | if (protocol == htons(ETH_P_8021Q)) { | 2140 | if (protocol == htons(ETH_P_8021Q)) { |
2138 | struct vlan_ethhdr *veh = (struct vlan_ethhdr *)skb->data; | 2141 | struct vlan_ethhdr *veh = (struct vlan_ethhdr *)skb->data; |
2139 | protocol = veh->h_vlan_encapsulated_proto; | 2142 | protocol = veh->h_vlan_encapsulated_proto; |
@@ -5986,6 +5989,7 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name, | |||
5986 | dev_net_set(dev, &init_net); | 5989 | dev_net_set(dev, &init_net); |
5987 | 5990 | ||
5988 | dev->gso_max_size = GSO_MAX_SIZE; | 5991 | dev->gso_max_size = GSO_MAX_SIZE; |
5992 | dev->gso_max_segs = GSO_MAX_SEGS; | ||
5989 | 5993 | ||
5990 | INIT_LIST_HEAD(&dev->napi_list); | 5994 | INIT_LIST_HEAD(&dev->napi_list); |
5991 | INIT_LIST_HEAD(&dev->unreg_list); | 5995 | INIT_LIST_HEAD(&dev->unreg_list); |