Skip to content

Commit

Permalink
bonding: options: remove bond->lock usage
Browse files Browse the repository at this point in the history
We're safe to remove the bond->lock use from the arp targets because
arp_rcv_probe no longer acquires bond->lock, only rcu_read_lock.
Also setting the primary slave is safe because noone uses the bond->lock
as a syncing mechanism for that anymore.

Signed-off-by: Nikolay Aleksandrov <nikolay@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Nikolay Aleksandrov authored and David S. Miller committed Sep 10, 2014
1 parent e9fe8ef commit 246df7b
Showing 1 changed file with 1 addition and 18 deletions.
19 changes: 1 addition & 18 deletions drivers/net/bonding/bond_options.c
Original file line number Diff line number Diff line change
Expand Up @@ -955,14 +955,7 @@ static int _bond_option_arp_ip_target_add(struct bonding *bond, __be32 target)

static int bond_option_arp_ip_target_add(struct bonding *bond, __be32 target)
{
int ret;

/* not to race with bond_arp_rcv */
write_lock_bh(&bond->lock);
ret = _bond_option_arp_ip_target_add(bond, target);
write_unlock_bh(&bond->lock);

return ret;
return _bond_option_arp_ip_target_add(bond, target);
}

static int bond_option_arp_ip_target_rem(struct bonding *bond, __be32 target)
Expand Down Expand Up @@ -991,9 +984,6 @@ static int bond_option_arp_ip_target_rem(struct bonding *bond, __be32 target)

netdev_info(bond->dev, "Removing ARP target %pI4\n", &target);

/* not to race with bond_arp_rcv */
write_lock_bh(&bond->lock);

bond_for_each_slave(bond, slave, iter) {
targets_rx = slave->target_last_arp_rx;
for (i = ind; (i < BOND_MAX_ARP_TARGETS-1) && targets[i+1]; i++)
Expand All @@ -1004,20 +994,15 @@ static int bond_option_arp_ip_target_rem(struct bonding *bond, __be32 target)
targets[i] = targets[i+1];
targets[i] = 0;

write_unlock_bh(&bond->lock);

return 0;
}

void bond_option_arp_ip_targets_clear(struct bonding *bond)
{
int i;

/* not to race with bond_arp_rcv */
write_lock_bh(&bond->lock);
for (i = 0; i < BOND_MAX_ARP_TARGETS; i++)
_bond_options_arp_ip_target_set(bond, i, 0, 0);
write_unlock_bh(&bond->lock);
}

static int bond_option_arp_ip_targets_set(struct bonding *bond,
Expand Down Expand Up @@ -1081,7 +1066,6 @@ static int bond_option_primary_set(struct bonding *bond,
struct slave *slave;

block_netpoll_tx();
read_lock(&bond->lock);
write_lock_bh(&bond->curr_slave_lock);

p = strchr(primary, '\n');
Expand Down Expand Up @@ -1120,7 +1104,6 @@ static int bond_option_primary_set(struct bonding *bond,

out:
write_unlock_bh(&bond->curr_slave_lock);
read_unlock(&bond->lock);
unblock_netpoll_tx();

return 0;
Expand Down

0 comments on commit 246df7b

Please sign in to comment.