diff options
author | Jiri Pirko <jpirko@redhat.com> | 2010-05-18 01:42:40 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-06-02 06:39:41 -0400 |
commit | b15ba0fbdc2e54c3885fed91c54aeef7fe474033 (patch) | |
tree | bc51f9675212866b4f7ae68fd54fa28b3e85e6d0 /drivers/net/bonding | |
parent | 64585909996de7deaf8aa5cf7629d775b16ee417 (diff) |
bonding: move slave MTU handling from sysfs V2
V1->V2: corrected res/ret use
For some reason, MTU handling (storing, and restoring) is taking place in
bond_sysfs. The correct place for this code is in bond_enslave, bond_release.
So move it there.
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bonding')
-rw-r--r-- | drivers/net/bonding/bond_main.c | 15 | ||||
-rw-r--r-- | drivers/net/bonding/bond_sysfs.c | 22 |
2 files changed, 16 insertions, 21 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 5e12462a9d5e..2c3f9db91b50 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -1533,6 +1533,14 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) | |||
1533 | */ | 1533 | */ |
1534 | new_slave->original_flags = slave_dev->flags; | 1534 | new_slave->original_flags = slave_dev->flags; |
1535 | 1535 | ||
1536 | /* Save slave's original mtu and then set it to match the bond */ | ||
1537 | new_slave->original_mtu = slave_dev->mtu; | ||
1538 | res = dev_set_mtu(slave_dev, bond->dev->mtu); | ||
1539 | if (res) { | ||
1540 | pr_debug("Error %d calling dev_set_mtu\n", res); | ||
1541 | goto err_free; | ||
1542 | } | ||
1543 | |||
1536 | /* | 1544 | /* |
1537 | * Save slave's original ("permanent") mac address for modes | 1545 | * Save slave's original ("permanent") mac address for modes |
1538 | * that need it, and for restoring it upon release, and then | 1546 | * that need it, and for restoring it upon release, and then |
@@ -1550,7 +1558,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) | |||
1550 | res = dev_set_mac_address(slave_dev, &addr); | 1558 | res = dev_set_mac_address(slave_dev, &addr); |
1551 | if (res) { | 1559 | if (res) { |
1552 | pr_debug("Error %d calling set_mac_address\n", res); | 1560 | pr_debug("Error %d calling set_mac_address\n", res); |
1553 | goto err_free; | 1561 | goto err_restore_mtu; |
1554 | } | 1562 | } |
1555 | } | 1563 | } |
1556 | 1564 | ||
@@ -1785,6 +1793,9 @@ err_restore_mac: | |||
1785 | dev_set_mac_address(slave_dev, &addr); | 1793 | dev_set_mac_address(slave_dev, &addr); |
1786 | } | 1794 | } |
1787 | 1795 | ||
1796 | err_restore_mtu: | ||
1797 | dev_set_mtu(slave_dev, new_slave->original_mtu); | ||
1798 | |||
1788 | err_free: | 1799 | err_free: |
1789 | kfree(new_slave); | 1800 | kfree(new_slave); |
1790 | 1801 | ||
@@ -1969,6 +1980,8 @@ int bond_release(struct net_device *bond_dev, struct net_device *slave_dev) | |||
1969 | dev_set_mac_address(slave_dev, &addr); | 1980 | dev_set_mac_address(slave_dev, &addr); |
1970 | } | 1981 | } |
1971 | 1982 | ||
1983 | dev_set_mtu(slave_dev, slave->original_mtu); | ||
1984 | |||
1972 | slave_dev->priv_flags &= ~(IFF_MASTER_8023AD | IFF_MASTER_ALB | | 1985 | slave_dev->priv_flags &= ~(IFF_MASTER_8023AD | IFF_MASTER_ALB | |
1973 | IFF_SLAVE_INACTIVE | IFF_BONDING | | 1986 | IFF_SLAVE_INACTIVE | IFF_BONDING | |
1974 | IFF_SLAVE_NEEDARP); | 1987 | IFF_SLAVE_NEEDARP); |
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c index 392e29115c3c..29a7a8a6d16f 100644 --- a/drivers/net/bonding/bond_sysfs.c +++ b/drivers/net/bonding/bond_sysfs.c | |||
@@ -220,7 +220,6 @@ static ssize_t bonding_store_slaves(struct device *d, | |||
220 | char command[IFNAMSIZ + 1] = { 0, }; | 220 | char command[IFNAMSIZ + 1] = { 0, }; |
221 | char *ifname; | 221 | char *ifname; |
222 | int i, res, ret = count; | 222 | int i, res, ret = count; |
223 | u32 original_mtu; | ||
224 | struct slave *slave; | 223 | struct slave *slave; |
225 | struct net_device *dev = NULL; | 224 | struct net_device *dev = NULL; |
226 | struct bonding *bond = to_bond(d); | 225 | struct bonding *bond = to_bond(d); |
@@ -281,18 +280,7 @@ static ssize_t bonding_store_slaves(struct device *d, | |||
281 | memcpy(bond->dev->dev_addr, dev->dev_addr, | 280 | memcpy(bond->dev->dev_addr, dev->dev_addr, |
282 | dev->addr_len); | 281 | dev->addr_len); |
283 | 282 | ||
284 | /* Set the slave's MTU to match the bond */ | ||
285 | original_mtu = dev->mtu; | ||
286 | res = dev_set_mtu(dev, bond->dev->mtu); | ||
287 | if (res) { | ||
288 | ret = res; | ||
289 | goto out; | ||
290 | } | ||
291 | |||
292 | res = bond_enslave(bond->dev, dev); | 283 | res = bond_enslave(bond->dev, dev); |
293 | bond_for_each_slave(bond, slave, i) | ||
294 | if (strnicmp(slave->dev->name, ifname, IFNAMSIZ) == 0) | ||
295 | slave->original_mtu = original_mtu; | ||
296 | if (res) | 284 | if (res) |
297 | ret = res; | 285 | ret = res; |
298 | 286 | ||
@@ -301,23 +289,17 @@ static ssize_t bonding_store_slaves(struct device *d, | |||
301 | 289 | ||
302 | if (command[0] == '-') { | 290 | if (command[0] == '-') { |
303 | dev = NULL; | 291 | dev = NULL; |
304 | original_mtu = 0; | ||
305 | bond_for_each_slave(bond, slave, i) | 292 | bond_for_each_slave(bond, slave, i) |
306 | if (strnicmp(slave->dev->name, ifname, IFNAMSIZ) == 0) { | 293 | if (strnicmp(slave->dev->name, ifname, IFNAMSIZ) == 0) { |
307 | dev = slave->dev; | 294 | dev = slave->dev; |
308 | original_mtu = slave->original_mtu; | ||
309 | break; | 295 | break; |
310 | } | 296 | } |
311 | if (dev) { | 297 | if (dev) { |
312 | pr_info("%s: Removing slave %s\n", | 298 | pr_info("%s: Removing slave %s\n", |
313 | bond->dev->name, dev->name); | 299 | bond->dev->name, dev->name); |
314 | res = bond_release(bond->dev, dev); | 300 | res = bond_release(bond->dev, dev); |
315 | if (res) { | 301 | if (res) |
316 | ret = res; | 302 | ret = res; |
317 | goto out; | ||
318 | } | ||
319 | /* set the slave MTU to the default */ | ||
320 | dev_set_mtu(dev, original_mtu); | ||
321 | } else { | 303 | } else { |
322 | pr_err("unable to remove non-existent slave %s for bond %s.\n", | 304 | pr_err("unable to remove non-existent slave %s for bond %s.\n", |
323 | ifname, bond->dev->name); | 305 | ifname, bond->dev->name); |