aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bonding/bond_sysfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/bonding/bond_sysfs.c')
-rw-r--r--drivers/net/bonding/bond_sysfs.c10
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 {