Commit f9f3545e authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller

bonding: make bonding_store_slaves simpler

This patch makes bonding_store_slaves function nicer and easier to understand.
Signed-off-by: default avatarJiri Pirko <jpirko@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3dd90905
...@@ -211,7 +211,8 @@ static ssize_t bonding_show_slaves(struct device *d, ...@@ -211,7 +211,8 @@ static ssize_t bonding_show_slaves(struct device *d,
/* /*
* Set the slaves in the current bond. The bond interface must be * Set the slaves in the current bond. The bond interface must be
* up for this to succeed. * up for this to succeed.
* This function is largely the same flow as bonding_update_bonds(). * This is supposed to be only thin wrapper for bond_enslave and bond_release.
* All hard work should be done there.
*/ */
static ssize_t bonding_store_slaves(struct device *d, static ssize_t bonding_store_slaves(struct device *d,
struct device_attribute *attr, struct device_attribute *attr,
...@@ -219,9 +220,8 @@ static ssize_t bonding_store_slaves(struct device *d, ...@@ -219,9 +220,8 @@ static ssize_t bonding_store_slaves(struct device *d,
{ {
char command[IFNAMSIZ + 1] = { 0, }; char command[IFNAMSIZ + 1] = { 0, };
char *ifname; char *ifname;
int i, res, ret = count; int res, ret = count;
struct slave *slave; struct net_device *dev;
struct net_device *dev = NULL;
struct bonding *bond = to_bond(d); struct bonding *bond = to_bond(d);
/* Quick sanity check -- is the bond interface up? */ /* Quick sanity check -- is the bond interface up? */
...@@ -230,8 +230,6 @@ static ssize_t bonding_store_slaves(struct device *d, ...@@ -230,8 +230,6 @@ static ssize_t bonding_store_slaves(struct device *d,
bond->dev->name); bond->dev->name);
} }
/* Note: We can't hold bond->lock here, as bond_create grabs it. */
if (!rtnl_trylock()) if (!rtnl_trylock())
return restart_syscall(); return restart_syscall();
...@@ -241,19 +239,17 @@ static ssize_t bonding_store_slaves(struct device *d, ...@@ -241,19 +239,17 @@ static ssize_t bonding_store_slaves(struct device *d,
!dev_valid_name(ifname)) !dev_valid_name(ifname))
goto err_no_cmd; goto err_no_cmd;
if (command[0] == '+') { dev = __dev_get_by_name(dev_net(bond->dev), ifname);
if (!dev) {
/* Got a slave name in ifname. */ pr_info("%s: Interface %s does not exist!\n",
bond->dev->name, ifname);
dev = __dev_get_by_name(dev_net(bond->dev), ifname); ret = -ENODEV;
if (!dev) { goto out;
pr_info("%s: Interface %s does not exist!\n", }
bond->dev->name, ifname);
ret = -ENODEV;
goto out;
}
pr_info("%s: Adding slave %s.\n", bond->dev->name, ifname); switch (command[0]) {
case '+':
pr_info("%s: Adding slave %s.\n", bond->dev->name, dev->name);
/* If this is the first slave, then we need to set /* If this is the first slave, then we need to set
the master's hardware address to be the same as the the master's hardware address to be the same as the
...@@ -263,33 +259,21 @@ static ssize_t bonding_store_slaves(struct device *d, ...@@ -263,33 +259,21 @@ static ssize_t bonding_store_slaves(struct device *d,
dev->addr_len); dev->addr_len);
res = bond_enslave(bond->dev, dev); res = bond_enslave(bond->dev, dev);
if (res) break;
ret = res;
goto out; case '-':
} pr_info("%s: Removing slave %s.\n", bond->dev->name, dev->name);
res = bond_release(bond->dev, dev);
break;
if (command[0] == '-') { default:
dev = NULL; goto err_no_cmd;
bond_for_each_slave(bond, slave, i)
if (strnicmp(slave->dev->name, ifname, IFNAMSIZ) == 0) {
dev = slave->dev;
break;
}
if (dev) {
pr_info("%s: Removing slave %s\n",
bond->dev->name, dev->name);
res = bond_release(bond->dev, dev);
if (res)
ret = res;
} else {
pr_err("unable to remove non-existent slave %s for bond %s.\n",
ifname, bond->dev->name);
ret = -ENODEV;
}
goto out;
} }
if (res)
ret = res;
goto out;
err_no_cmd: err_no_cmd:
pr_err("no command found in slaves file for bond %s. Use +ifname or -ifname.\n", pr_err("no command found in slaves file for bond %s. Use +ifname or -ifname.\n",
bond->dev->name); bond->dev->name);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment