diff options
Diffstat (limited to 'drivers/net/bonding/bond_sysfs.c')
-rw-r--r-- | drivers/net/bonding/bond_sysfs.c | 10 |
1 files changed, 8 insertions, 2 deletions
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 { |