Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b15ba0fb authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller
Browse files

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: default avatarJiri Pirko <jpirko@redhat.com>
Signed-off-by: default avatarJay Vosburgh <fubar@us.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 64585909
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -1533,6 +1533,14 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
	 */
	new_slave->original_flags = slave_dev->flags;

	/* Save slave's original mtu and then set it to match the bond */
	new_slave->original_mtu = slave_dev->mtu;
	res = dev_set_mtu(slave_dev, bond->dev->mtu);
	if (res) {
		pr_debug("Error %d calling dev_set_mtu\n", res);
		goto err_free;
	}

	/*
	 * Save slave's original ("permanent") mac address for modes
	 * 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)
		res = dev_set_mac_address(slave_dev, &addr);
		if (res) {
			pr_debug("Error %d calling set_mac_address\n", res);
			goto err_free;
			goto err_restore_mtu;
		}
	}

@@ -1785,6 +1793,9 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
		dev_set_mac_address(slave_dev, &addr);
	}

err_restore_mtu:
	dev_set_mtu(slave_dev, new_slave->original_mtu);

err_free:
	kfree(new_slave);

@@ -1969,6 +1980,8 @@ int bond_release(struct net_device *bond_dev, struct net_device *slave_dev)
		dev_set_mac_address(slave_dev, &addr);
	}

	dev_set_mtu(slave_dev, slave->original_mtu);

	slave_dev->priv_flags &= ~(IFF_MASTER_8023AD | IFF_MASTER_ALB |
				   IFF_SLAVE_INACTIVE | IFF_BONDING |
				   IFF_SLAVE_NEEDARP);
+2 −20
Original line number Diff line number Diff line
@@ -220,7 +220,6 @@ static ssize_t bonding_store_slaves(struct device *d,
	char command[IFNAMSIZ + 1] = { 0, };
	char *ifname;
	int i, res, ret = count;
	u32 original_mtu;
	struct slave *slave;
	struct net_device *dev = NULL;
	struct bonding *bond = to_bond(d);
@@ -281,18 +280,7 @@ static ssize_t bonding_store_slaves(struct device *d,
			memcpy(bond->dev->dev_addr, dev->dev_addr,
			       dev->addr_len);

		/* Set the slave's MTU to match the bond */
		original_mtu = dev->mtu;
		res = dev_set_mtu(dev, bond->dev->mtu);
		if (res) {
			ret = res;
			goto out;
		}

		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;
		if (res)
			ret = res;

@@ -301,23 +289,17 @@ static ssize_t bonding_store_slaves(struct device *d,

	if (command[0] == '-') {
		dev = NULL;
		original_mtu = 0;
		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) {
			pr_info("%s: Removing slave %s\n",
				bond->dev->name, dev->name);
			res = bond_release(bond->dev, dev);
			if (res) {
			if (res)
				ret = res;
				goto out;
			}
			/* set the slave MTU to the default */
			dev_set_mtu(dev, original_mtu);
		} else {
			pr_err("unable to remove non-existent slave %s for bond %s.\n",
			       ifname, bond->dev->name);