diff options
-rw-r--r-- | drivers/net/bonding/bond_main.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 3d7693d1c512..d2f460b0dbab 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -1211,10 +1211,14 @@ static int bond_compute_features(struct bonding *bond) | |||
1211 | unsigned long features = BOND_INTERSECT_FEATURES; | 1211 | unsigned long features = BOND_INTERSECT_FEATURES; |
1212 | struct slave *slave; | 1212 | struct slave *slave; |
1213 | struct net_device *bond_dev = bond->dev; | 1213 | struct net_device *bond_dev = bond->dev; |
1214 | unsigned short max_hard_header_len = ETH_HLEN; | ||
1214 | int i; | 1215 | int i; |
1215 | 1216 | ||
1216 | bond_for_each_slave(bond, slave, i) | 1217 | bond_for_each_slave(bond, slave, i) { |
1217 | features &= (slave->dev->features & BOND_INTERSECT_FEATURES); | 1218 | features &= (slave->dev->features & BOND_INTERSECT_FEATURES); |
1219 | if (slave->dev->hard_header_len > max_hard_header_len) | ||
1220 | max_hard_header_len = slave->dev->hard_header_len; | ||
1221 | } | ||
1218 | 1222 | ||
1219 | if ((features & NETIF_F_SG) && | 1223 | if ((features & NETIF_F_SG) && |
1220 | !(features & NETIF_F_ALL_CSUM)) | 1224 | !(features & NETIF_F_ALL_CSUM)) |
@@ -1232,6 +1236,7 @@ static int bond_compute_features(struct bonding *bond) | |||
1232 | 1236 | ||
1233 | features |= (bond_dev->features & ~BOND_INTERSECT_FEATURES); | 1237 | features |= (bond_dev->features & ~BOND_INTERSECT_FEATURES); |
1234 | bond_dev->features = features; | 1238 | bond_dev->features = features; |
1239 | bond_dev->hard_header_len = max_hard_header_len; | ||
1235 | 1240 | ||
1236 | return 0; | 1241 | return 0; |
1237 | } | 1242 | } |