From: Veaceslav Falico Date: Thu, 5 Apr 2012 03:47:43 +0000 (+0000) Subject: bonding: properly unset current_arp_slave on slave link up X-Git-Tag: v3.2.17~100 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=873f40f17a6a7063af86befe4ffe4f70d98a1b1b;p=karo-tx-linux.git bonding: properly unset current_arp_slave on slave link up [ Upstream commit 5a4309746cd74734daa964acb02690c22b3c8911 ] When a slave comes up, we're unsetting the current_arp_slave without removing active flags from it, which can lead to situations where we have more than one slave with active flags in active-backup mode. To avoid this situation we must remove the active flags from a slave before removing it as a current_arp_slave. Signed-off-by: Veaceslav Falico Signed-off-by: Jay Vosburgh Signed-off-by: Andy Gospodarek Signed-off-by: Marcelo Ricardo Leitner Signed-off-by: David S. Miller Signed-off-by: Ben Hutchings --- diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index e58aa2b7a153..f65e0b9ae820 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -2982,7 +2982,11 @@ static void bond_ab_arp_commit(struct bonding *bond, int delta_in_ticks) trans_start + delta_in_ticks)) || bond->curr_active_slave != slave) { slave->link = BOND_LINK_UP; - bond->current_arp_slave = NULL; + if (bond->current_arp_slave) { + bond_set_slave_inactive_flags( + bond->current_arp_slave); + bond->current_arp_slave = NULL; + } pr_info("%s: link status definitely up for interface %s.\n", bond->dev->name, slave->dev->name);