|
@@ -260,6 +260,7 @@ static ssize_t bonding_store_slaves(struct device *d,
|
|
|
char command[IFNAMSIZ + 1] = { 0, };
|
|
|
char *ifname;
|
|
|
int i, res, found, ret = count;
|
|
|
+ u32 original_mtu;
|
|
|
struct slave *slave;
|
|
|
struct net_device *dev = NULL;
|
|
|
struct bonding *bond = to_bond(d);
|
|
@@ -325,6 +326,7 @@ static ssize_t bonding_store_slaves(struct device *d,
|
|
|
}
|
|
|
|
|
|
/* Set the slave's MTU to match the bond */
|
|
|
+ original_mtu = dev->mtu;
|
|
|
if (dev->mtu != bond->dev->mtu) {
|
|
|
if (dev->change_mtu) {
|
|
|
res = dev->change_mtu(dev,
|
|
@@ -339,6 +341,9 @@ static ssize_t bonding_store_slaves(struct device *d,
|
|
|
}
|
|
|
rtnl_lock();
|
|
|
res = bond_enslave(bond->dev, dev);
|
|
|
+ bond_for_each_slave(bond, slave, i)
|
|
|
+ if (strnicmp(slave->dev->name, ifname, IFNAMSIZ) == 0)
|
|
|
+ slave->original_mtu = original_mtu;
|
|
|
rtnl_unlock();
|
|
|
if (res) {
|
|
|
ret = res;
|
|
@@ -351,6 +356,7 @@ static ssize_t bonding_store_slaves(struct device *d,
|
|
|
bond_for_each_slave(bond, slave, i)
|
|
|
if (strnicmp(slave->dev->name, ifname, IFNAMSIZ) == 0) {
|
|
|
dev = slave->dev;
|
|
|
+ original_mtu = slave->original_mtu;
|
|
|
break;
|
|
|
}
|
|
|
if (dev) {
|
|
@@ -365,9 +371,9 @@ static ssize_t bonding_store_slaves(struct device *d,
|
|
|
}
|
|
|
/* set the slave MTU to the default */
|
|
|
if (dev->change_mtu) {
|
|
|
- dev->change_mtu(dev, 1500);
|
|
|
+ dev->change_mtu(dev, original_mtu);
|
|
|
} else {
|
|
|
- dev->mtu = 1500;
|
|
|
+ dev->mtu = original_mtu;
|
|
|
}
|
|
|
}
|
|
|
else {
|