Commit 81f23b13 authored by Veaceslav Falico's avatar Veaceslav Falico Committed by David S. Miller
Browse files

bonding: remove bond_for_each_slave_continue_reverse()



We only use it in rollback scenarios and can easily use the standart
bond_for_each_dev() instead.

CC: Jay Vosburgh <fubar@us.ibm.com>
CC: Andy Gospodarek <andy@greyhouse.net>
Signed-off-by: default avatarVeaceslav Falico <vfalico@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 31088a11
......@@ -1246,9 +1246,9 @@ static int alb_handle_addr_collision_on_attach(struct bonding *bond, struct slav
*/
static int alb_set_mac_address(struct bonding *bond, void *addr)
{
char tmp_addr[ETH_ALEN];
struct slave *slave;
struct slave *slave, *rollback_slave;
struct sockaddr sa;
char tmp_addr[ETH_ALEN];
int res;
if (bond->alb_info.rlb_enabled)
......@@ -1274,10 +1274,12 @@ static int alb_set_mac_address(struct bonding *bond, void *addr)
sa.sa_family = bond->dev->type;
/* unwind from head to the slave that failed */
bond_for_each_slave_continue_reverse(bond, slave) {
memcpy(tmp_addr, slave->dev->dev_addr, ETH_ALEN);
dev_set_mac_address(slave->dev, &sa);
memcpy(slave->dev->dev_addr, tmp_addr, ETH_ALEN);
bond_for_each_slave(bond, rollback_slave) {
if (rollback_slave == slave)
break;
memcpy(tmp_addr, rollback_slave->dev->dev_addr, ETH_ALEN);
dev_set_mac_address(rollback_slave->dev, &sa);
memcpy(rollback_slave->dev->dev_addr, tmp_addr, ETH_ALEN);
}
return res;
......
......@@ -332,7 +332,7 @@ static int bond_vlan_rx_add_vid(struct net_device *bond_dev,
__be16 proto, u16 vid)
{
struct bonding *bond = netdev_priv(bond_dev);
struct slave *slave;
struct slave *slave, *rollback_slave;
int res;
bond_for_each_slave(bond, slave) {
......@@ -344,9 +344,13 @@ static int bond_vlan_rx_add_vid(struct net_device *bond_dev,
return 0;
unwind:
/* unwind from the slave that failed */
bond_for_each_slave_continue_reverse(bond, slave)
vlan_vid_del(slave->dev, proto, vid);
/* unwind to the slave that failed */
bond_for_each_slave(bond, rollback_slave) {
if (rollback_slave == slave)
break;
vlan_vid_del(rollback_slave->dev, proto, vid);
}
return res;
}
......@@ -3468,7 +3472,7 @@ static int bond_neigh_setup(struct net_device *dev,
static int bond_change_mtu(struct net_device *bond_dev, int new_mtu)
{
struct bonding *bond = netdev_priv(bond_dev);
struct slave *slave;
struct slave *slave, *rollback_slave;
int res = 0;
pr_debug("bond=%p, name=%s, new_mtu=%d\n", bond,
......@@ -3517,13 +3521,16 @@ static int bond_change_mtu(struct net_device *bond_dev, int new_mtu)
unwind:
/* unwind from head to the slave that failed */
bond_for_each_slave_continue_reverse(bond, slave) {
bond_for_each_slave(bond, rollback_slave) {
int tmp_res;
tmp_res = dev_set_mtu(slave->dev, bond_dev->mtu);
if (rollback_slave == slave)
break;
tmp_res = dev_set_mtu(rollback_slave->dev, bond_dev->mtu);
if (tmp_res) {
pr_debug("unwind err %d dev %s\n",
tmp_res, slave->dev->name);
tmp_res, rollback_slave->dev->name);
}
}
......@@ -3540,8 +3547,8 @@ static int bond_change_mtu(struct net_device *bond_dev, int new_mtu)
static int bond_set_mac_address(struct net_device *bond_dev, void *addr)
{
struct bonding *bond = netdev_priv(bond_dev);
struct slave *slave, *rollback_slave;
struct sockaddr *sa = addr, tmp_sa;
struct slave *slave;
int res = 0;
if (bond->params.mode == BOND_MODE_ALB)
......@@ -3607,13 +3614,16 @@ static int bond_set_mac_address(struct net_device *bond_dev, void *addr)
tmp_sa.sa_family = bond_dev->type;
/* unwind from head to the slave that failed */
bond_for_each_slave_continue_reverse(bond, slave) {
bond_for_each_slave(bond, rollback_slave) {
int tmp_res;
tmp_res = dev_set_mac_address(slave->dev, &tmp_sa);
if (rollback_slave == slave)
break;
tmp_res = dev_set_mac_address(rollback_slave->dev, &tmp_sa);
if (tmp_res) {
pr_debug("unwind err %d dev %s\n",
tmp_res, slave->dev->name);
tmp_res, rollback_slave->dev->name);
}
}
......
......@@ -120,16 +120,6 @@
#define bond_for_each_slave_rcu(bond, pos) \
list_for_each_entry_rcu(pos, &(bond)->slave_list, list)
/**
* bond_for_each_slave_reverse - iterate in reverse from a given position
* @bond: the bond holding this list
* @pos: slave to continue from
*
* Caller must hold bond->lock
*/
#define bond_for_each_slave_continue_reverse(bond, pos) \
list_for_each_entry_continue_reverse(pos, &(bond)->slave_list, list)
#ifdef CONFIG_NET_POLL_CONTROLLER
extern atomic_t netpoll_block_tx;
......
Supports Markdown
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