bonding: rebuild the bond_resend_igmp_join_requests_delayed()
Subsystems (3)
PATCH v4 11/11 bonding: rebuild the bond_resend_igmp_join_requests_delayed()
The bond_resend_igmp_join_requests_delayed() and bond_resend_igmp_join_requests() should be integrated, because the bond_resend_igmp_join_requests_delayed() did nothing except bond_resend_igmp_join_requests().
The bond igmp_retrans could only be changed in bond_change_active_slave and here, bond_change_active_slave will be called in RTNL and curr_slave_lock, the bond_resend_igmp_join_requests already hold RTNL, so no need to free RTNL and hold curr_slave_lock again, it may be a small optimization, so move the igmp_retrans in RTNL and remove the curr_slave_lock.
Signed-off-by Ding Tianhong <[email protected]>
--- drivers/net/bonding/bond_main.c | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-)
drivers/net/bonding/bond_main.c +5 -16
@@ -591,33 +591,22 @@ static int bond_set_allmulti(struct bonding *bond, int inc)* device and retransmit an IGMP JOIN request to the current active * slave. */ -static void bond_resend_igmp_join_requests (struct bonding *bond) +static void bond_resend_igmp_join_requests_delayed (struct work_struct *work) { + struct bonding *bond = container_of(work, struct bonding, + mcast_work.work); +if (!rtnl_trylock ()) {queue_delayed_work (bond->wq, &bond->mcast_work,1 );return ; }call_netdevice_notifiers (NETDEV_RESEND_IGMP , bond->dev); -rtnl_unlock (); -/* We use curr_slave_lock to protect against concurrent access to -* igmp_retrans from multiple running instances of this function and -* bond_change_active_slave -*/ -write_lock_bh (&bond->curr_slave_lock);if (bond->igmp_retrans >1 ) { bond->igmp_retrans--;queue_delayed_work (bond->wq, &bond->mcast_work,HZ /5 ); } -write_unlock_bh (&bond->curr_slave_lock); -} - -static void bond_resend_igmp_join_requests_delayed (struct work_struct *work) -{ - struct bonding *bond = container_of(work, struct bonding, - mcast_work.work); - -bond_resend_igmp_join_requests (bond); +rtnl_unlock (); }/* Flush bond's hardware addresses from slave
Signature · 1 line
1.8.2.1