|
@@ -2605,25 +2605,21 @@ do_failover:
|
|
|
static void bond_ab_arp_probe(struct bonding *bond)
|
|
|
{
|
|
|
struct slave *slave, *before = NULL, *new_slave = NULL,
|
|
|
- *curr_arp_slave = rcu_dereference(bond->current_arp_slave);
|
|
|
+ *curr_arp_slave = rcu_dereference(bond->current_arp_slave),
|
|
|
+ *curr_active_slave = rcu_dereference(bond->curr_active_slave);
|
|
|
struct list_head *iter;
|
|
|
bool found = false;
|
|
|
|
|
|
- read_lock(&bond->curr_slave_lock);
|
|
|
-
|
|
|
- if (curr_arp_slave && bond->curr_active_slave)
|
|
|
+ if (curr_arp_slave && curr_active_slave)
|
|
|
pr_info("PROBE: c_arp %s && cas %s BAD\n",
|
|
|
curr_arp_slave->dev->name,
|
|
|
- bond->curr_active_slave->dev->name);
|
|
|
+ curr_active_slave->dev->name);
|
|
|
|
|
|
- if (bond->curr_active_slave) {
|
|
|
- bond_arp_send_all(bond, bond->curr_active_slave);
|
|
|
- read_unlock(&bond->curr_slave_lock);
|
|
|
+ if (curr_active_slave) {
|
|
|
+ bond_arp_send_all(bond, curr_active_slave);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- read_unlock(&bond->curr_slave_lock);
|
|
|
-
|
|
|
/* if we don't have a curr_active_slave, search for the next available
|
|
|
* backup slave from the current_arp_slave and make it the candidate
|
|
|
* for becoming the curr_active_slave
|