提交 f9f3545e 编写于 作者: J Jiri Pirko 提交者: David S. Miller

bonding: make bonding_store_slaves simpler

This patch makes bonding_store_slaves function nicer and easier to understand.
Signed-off-by: NJiri Pirko <jpirko@redhat.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 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% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册