|
@@ -777,6 +777,9 @@ static void bond_resend_igmp_join_requests(struct bonding *bond)
|
|
|
|
|
|
read_lock(&bond->lock);
|
|
read_lock(&bond->lock);
|
|
|
|
|
|
|
|
+ if (bond->kill_timers)
|
|
|
|
+ goto out;
|
|
|
|
+
|
|
/* rejoin all groups on bond device */
|
|
/* rejoin all groups on bond device */
|
|
__bond_resend_igmp_join_requests(bond->dev);
|
|
__bond_resend_igmp_join_requests(bond->dev);
|
|
|
|
|
|
@@ -790,9 +793,9 @@ static void bond_resend_igmp_join_requests(struct bonding *bond)
|
|
__bond_resend_igmp_join_requests(vlan_dev);
|
|
__bond_resend_igmp_join_requests(vlan_dev);
|
|
}
|
|
}
|
|
|
|
|
|
- if (--bond->igmp_retrans > 0)
|
|
|
|
|
|
+ if ((--bond->igmp_retrans > 0) && !bond->kill_timers)
|
|
queue_delayed_work(bond->wq, &bond->mcast_work, HZ/5);
|
|
queue_delayed_work(bond->wq, &bond->mcast_work, HZ/5);
|
|
-
|
|
|
|
|
|
+out:
|
|
read_unlock(&bond->lock);
|
|
read_unlock(&bond->lock);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2538,7 +2541,7 @@ void bond_mii_monitor(struct work_struct *work)
|
|
}
|
|
}
|
|
|
|
|
|
re_arm:
|
|
re_arm:
|
|
- if (bond->params.miimon)
|
|
|
|
|
|
+ if (bond->params.miimon && !bond->kill_timers)
|
|
queue_delayed_work(bond->wq, &bond->mii_work,
|
|
queue_delayed_work(bond->wq, &bond->mii_work,
|
|
msecs_to_jiffies(bond->params.miimon));
|
|
msecs_to_jiffies(bond->params.miimon));
|
|
out:
|
|
out:
|
|
@@ -2886,7 +2889,7 @@ void bond_loadbalance_arp_mon(struct work_struct *work)
|
|
}
|
|
}
|
|
|
|
|
|
re_arm:
|
|
re_arm:
|
|
- if (bond->params.arp_interval)
|
|
|
|
|
|
+ if (bond->params.arp_interval && !bond->kill_timers)
|
|
queue_delayed_work(bond->wq, &bond->arp_work, delta_in_ticks);
|
|
queue_delayed_work(bond->wq, &bond->arp_work, delta_in_ticks);
|
|
out:
|
|
out:
|
|
read_unlock(&bond->lock);
|
|
read_unlock(&bond->lock);
|
|
@@ -3154,7 +3157,7 @@ void bond_activebackup_arp_mon(struct work_struct *work)
|
|
bond_ab_arp_probe(bond);
|
|
bond_ab_arp_probe(bond);
|
|
|
|
|
|
re_arm:
|
|
re_arm:
|
|
- if (bond->params.arp_interval)
|
|
|
|
|
|
+ if (bond->params.arp_interval && !bond->kill_timers)
|
|
queue_delayed_work(bond->wq, &bond->arp_work, delta_in_ticks);
|
|
queue_delayed_work(bond->wq, &bond->arp_work, delta_in_ticks);
|
|
out:
|
|
out:
|
|
read_unlock(&bond->lock);
|
|
read_unlock(&bond->lock);
|