diff options
-rw-r--r-- | drivers/net/bonding/bond_main.c | 3 | ||||
-rw-r--r-- | drivers/net/bonding/bond_sysfs.c | 10 | ||||
-rw-r--r-- | drivers/net/bonding/bonding.h | 1 |
3 files changed, 11 insertions, 3 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 3eebfe287533..7be23364a9d6 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -1225,7 +1225,8 @@ static int bond_compute_features(struct bonding *bond) | |||
1225 | struct slave *slave; | 1225 | struct slave *slave; |
1226 | struct net_device *bond_dev = bond->dev; | 1226 | struct net_device *bond_dev = bond->dev; |
1227 | unsigned long features = bond_dev->features; | 1227 | unsigned long features = bond_dev->features; |
1228 | unsigned short max_hard_header_len = ETH_HLEN; | 1228 | unsigned short max_hard_header_len = max((u16)ETH_HLEN, |
1229 | bond_dev->hard_header_len); | ||
1229 | int i; | 1230 | int i; |
1230 | 1231 | ||
1231 | features &= ~(NETIF_F_ALL_CSUM | BOND_VLAN_FEATURES); | 1232 | features &= ~(NETIF_F_ALL_CSUM | BOND_VLAN_FEATURES); |
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c index ca4e429f9ec2..583c568e1764 100644 --- a/drivers/net/bonding/bond_sysfs.c +++ b/drivers/net/bonding/bond_sysfs.c | |||
@@ -260,6 +260,7 @@ static ssize_t bonding_store_slaves(struct device *d, | |||
260 | char command[IFNAMSIZ + 1] = { 0, }; | 260 | char command[IFNAMSIZ + 1] = { 0, }; |
261 | char *ifname; | 261 | char *ifname; |
262 | int i, res, found, ret = count; | 262 | int i, res, found, ret = count; |
263 | u32 original_mtu; | ||
263 | struct slave *slave; | 264 | struct slave *slave; |
264 | struct net_device *dev = NULL; | 265 | struct net_device *dev = NULL; |
265 | struct bonding *bond = to_bond(d); | 266 | struct bonding *bond = to_bond(d); |
@@ -325,6 +326,7 @@ static ssize_t bonding_store_slaves(struct device *d, | |||
325 | } | 326 | } |
326 | 327 | ||
327 | /* Set the slave's MTU to match the bond */ | 328 | /* Set the slave's MTU to match the bond */ |
329 | original_mtu = dev->mtu; | ||
328 | if (dev->mtu != bond->dev->mtu) { | 330 | if (dev->mtu != bond->dev->mtu) { |
329 | if (dev->change_mtu) { | 331 | if (dev->change_mtu) { |
330 | res = dev->change_mtu(dev, | 332 | res = dev->change_mtu(dev, |
@@ -339,6 +341,9 @@ static ssize_t bonding_store_slaves(struct device *d, | |||
339 | } | 341 | } |
340 | rtnl_lock(); | 342 | rtnl_lock(); |
341 | res = bond_enslave(bond->dev, dev); | 343 | res = bond_enslave(bond->dev, dev); |
344 | bond_for_each_slave(bond, slave, i) | ||
345 | if (strnicmp(slave->dev->name, ifname, IFNAMSIZ) == 0) | ||
346 | slave->original_mtu = original_mtu; | ||
342 | rtnl_unlock(); | 347 | rtnl_unlock(); |
343 | if (res) { | 348 | if (res) { |
344 | ret = res; | 349 | ret = res; |
@@ -351,6 +356,7 @@ static ssize_t bonding_store_slaves(struct device *d, | |||
351 | bond_for_each_slave(bond, slave, i) | 356 | bond_for_each_slave(bond, slave, i) |
352 | if (strnicmp(slave->dev->name, ifname, IFNAMSIZ) == 0) { | 357 | if (strnicmp(slave->dev->name, ifname, IFNAMSIZ) == 0) { |
353 | dev = slave->dev; | 358 | dev = slave->dev; |
359 | original_mtu = slave->original_mtu; | ||
354 | break; | 360 | break; |
355 | } | 361 | } |
356 | if (dev) { | 362 | if (dev) { |
@@ -365,9 +371,9 @@ static ssize_t bonding_store_slaves(struct device *d, | |||
365 | } | 371 | } |
366 | /* set the slave MTU to the default */ | 372 | /* set the slave MTU to the default */ |
367 | if (dev->change_mtu) { | 373 | if (dev->change_mtu) { |
368 | dev->change_mtu(dev, 1500); | 374 | dev->change_mtu(dev, original_mtu); |
369 | } else { | 375 | } else { |
370 | dev->mtu = 1500; | 376 | dev->mtu = original_mtu; |
371 | } | 377 | } |
372 | } | 378 | } |
373 | else { | 379 | else { |
diff --git a/drivers/net/bonding/bonding.h b/drivers/net/bonding/bonding.h index 5011ba9e4661..ad9c632f88e4 100644 --- a/drivers/net/bonding/bonding.h +++ b/drivers/net/bonding/bonding.h | |||
@@ -156,6 +156,7 @@ struct slave { | |||
156 | s8 link; /* one of BOND_LINK_XXXX */ | 156 | s8 link; /* one of BOND_LINK_XXXX */ |
157 | s8 state; /* one of BOND_STATE_XXXX */ | 157 | s8 state; /* one of BOND_STATE_XXXX */ |
158 | u32 original_flags; | 158 | u32 original_flags; |
159 | u32 original_mtu; | ||
159 | u32 link_failure_count; | 160 | u32 link_failure_count; |
160 | u16 speed; | 161 | u16 speed; |
161 | u8 duplex; | 162 | u8 duplex; |