diff options
author | sfeldma@cumulusnetworks.com <sfeldma@cumulusnetworks.com> | 2013-12-17 21:30:16 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-12-19 18:32:09 -0500 |
commit | 1cc0b1e30c662d84a89690f42826cf49e2278b97 (patch) | |
tree | aec49e11ac345ac58930df56918087d9d8a3af51 /drivers/net/bonding/bond_sysfs.c | |
parent | 2c9839c143bbc8c6612f56351dae8d57111aee37 (diff) | |
download | op-kernel-dev-1cc0b1e30c662d84a89690f42826cf49e2278b97.zip op-kernel-dev-1cc0b1e30c662d84a89690f42826cf49e2278b97.tar.gz |
bonding: add all_slaves_active attribute netlink support
Add IFLA_BOND_ALL_SLAVES_ACTIVE to allow get/set of bonding parameter
all_slaves_active via netlink.
Signed-off-by: Scott Feldman <sfeldma@cumulusnetworks.com>
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bonding/bond_sysfs.c')
-rw-r--r-- | drivers/net/bonding/bond_sysfs.c | 34 |
1 files changed, 7 insertions, 27 deletions
diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c index 7efa33a..9a37125 100644 --- a/drivers/net/bonding/bond_sysfs.c +++ b/drivers/net/bonding/bond_sysfs.c @@ -1290,41 +1290,21 @@ static ssize_t bonding_store_slaves_active(struct device *d, const char *buf, size_t count) { struct bonding *bond = to_bond(d); - int new_value, ret = count; - struct list_head *iter; - struct slave *slave; - - if (!rtnl_trylock()) - return restart_syscall(); + int new_value, ret; if (sscanf(buf, "%d", &new_value) != 1) { pr_err("%s: no all_slaves_active value specified.\n", bond->dev->name); - ret = -EINVAL; - goto out; + return -EINVAL; } - if (new_value == bond->params.all_slaves_active) - goto out; + if (!rtnl_trylock()) + return restart_syscall(); - if ((new_value == 0) || (new_value == 1)) { - bond->params.all_slaves_active = new_value; - } else { - pr_info("%s: Ignoring invalid all_slaves_active value %d.\n", - bond->dev->name, new_value); - ret = -EINVAL; - goto out; - } + ret = bond_option_all_slaves_active_set(bond, new_value); + if (!ret) + ret = count; - bond_for_each_slave(bond, slave, iter) { - if (!bond_is_active_slave(slave)) { - if (new_value) - slave->inactive = 0; - else - slave->inactive = 1; - } - } -out: rtnl_unlock(); return ret; } |