Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 202631
b: refs/heads/master
c: f9f3545
h: refs/heads/master
i:
  202629: ace2c14
  202627: 17387b9
  202623: 8ebc8d0
v: v3
  • Loading branch information
Jiri Pirko authored and David S. Miller committed Jun 2, 2010
1 parent f5364ef commit bba75b4
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 42 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3dd90905e08655aa7754f08ebe8b1f44e2793074
refs/heads/master: f9f3545e1e5de3d3f5376ae6c522aedb1205f4e1
66 changes: 25 additions & 41 deletions trunk/drivers/net/bonding/bond_sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -211,17 +211,17 @@ static ssize_t bonding_show_slaves(struct device *d,
/*
* Set the slaves in the current bond. The bond interface must be
* 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,
struct device_attribute *attr,
const char *buffer, size_t count)
{
char command[IFNAMSIZ + 1] = { 0, };
char *ifname;
int i, res, ret = count;
struct slave *slave;
struct net_device *dev = NULL;
int res, ret = count;
struct net_device *dev;
struct bonding *bond = to_bond(d);

/* Quick sanity check -- is the bond interface up? */
Expand All @@ -230,8 +230,6 @@ static ssize_t bonding_store_slaves(struct device *d,
bond->dev->name);
}

/* Note: We can't hold bond->lock here, as bond_create grabs it. */

if (!rtnl_trylock())
return restart_syscall();

Expand All @@ -241,19 +239,17 @@ static ssize_t bonding_store_slaves(struct device *d,
!dev_valid_name(ifname))
goto err_no_cmd;

if (command[0] == '+') {

/* Got a slave name in ifname. */

dev = __dev_get_by_name(dev_net(bond->dev), ifname);
if (!dev) {
pr_info("%s: Interface %s does not exist!\n",
bond->dev->name, ifname);
ret = -ENODEV;
goto out;
}
dev = __dev_get_by_name(dev_net(bond->dev), ifname);
if (!dev) {
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
the master's hardware address to be the same as the
Expand All @@ -263,33 +259,21 @@ static ssize_t bonding_store_slaves(struct device *d,
dev->addr_len);

res = bond_enslave(bond->dev, dev);
if (res)
ret = res;
break;

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] == '-') {
dev = NULL;
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;
default:
goto err_no_cmd;
}

if (res)
ret = res;
goto out;

err_no_cmd:
pr_err("no command found in slaves file for bond %s. Use +ifname or -ifname.\n",
bond->dev->name);
Expand Down

0 comments on commit bba75b4

Please sign in to comment.