Jiri Slaby 5da0cb
From: Mahesh Bandewar <maheshb@google.com>
Jiri Slaby 5da0cb
Date: Fri, 6 Dec 2019 15:44:55 -0800
Jiri Slaby 5da0cb
Subject: bonding: fix active-backup transition after link failure
Jiri Slaby 5da0cb
Git-commit: 5d485ed88d48f8101a2067348e267c0aaf4ed486
Jiri Slaby 5da0cb
Patch-mainline: 5.5-rc3
Jiri Slaby 5da0cb
References: git-fixes
Jiri Slaby 5da0cb
Jiri Slaby 5da0cb
After the recent fix in commit 1899bb325149 ("bonding: fix state
Jiri Slaby 5da0cb
transition issue in link monitoring"), the active-backup mode with
Jiri Slaby 5da0cb
miimon initially come-up fine but after a link-failure, both members
Jiri Slaby 5da0cb
transition into backup state.
Jiri Slaby 5da0cb
Jiri Slaby 5da0cb
Following steps to reproduce the scenario (eth1 and eth2 are the
Jiri Slaby 5da0cb
slaves of the bond):
Jiri Slaby 5da0cb
Jiri Slaby 5da0cb
    ip link set eth1 up
Jiri Slaby 5da0cb
    ip link set eth2 down
Jiri Slaby 5da0cb
    sleep 1
Jiri Slaby 5da0cb
    ip link set eth2 up
Jiri Slaby 5da0cb
    ip link set eth1 down
Jiri Slaby 5da0cb
    cat /sys/class/net/eth1/bonding_slave/state
Jiri Slaby 5da0cb
    cat /sys/class/net/eth2/bonding_slave/state
Jiri Slaby 5da0cb
Jiri Slaby 5da0cb
Fixes: 1899bb325149 ("bonding: fix state transition issue in link monitoring")
Jiri Slaby 5da0cb
CC: Jay Vosburgh <jay.vosburgh@canonical.com>
Jiri Slaby 5da0cb
Signed-off-by: Mahesh Bandewar <maheshb@google.com>
Jiri Slaby 5da0cb
Acked-by: Jay Vosburgh <jay.vosburgh@canonical.com>
Jiri Slaby 5da0cb
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Jiri Slaby 5da0cb
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Jiri Slaby 5da0cb
---
Jiri Slaby 5da0cb
 drivers/net/bonding/bond_main.c |    3 ---
Jiri Slaby 5da0cb
 1 file changed, 3 deletions(-)
Jiri Slaby 5da0cb
Jiri Slaby 5da0cb
--- a/drivers/net/bonding/bond_main.c
Jiri Slaby 5da0cb
+++ b/drivers/net/bonding/bond_main.c
Jiri Slaby 5da0cb
@@ -2177,9 +2177,6 @@ static void bond_miimon_commit(struct bo
Jiri Slaby 5da0cb
 			} else if (BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP) {
Jiri Slaby 5da0cb
 				/* make it immediately active */
Jiri Slaby 5da0cb
 				bond_set_active_slave(slave);
Jiri Slaby 5da0cb
-			} else if (slave != primary) {
Jiri Slaby 5da0cb
-				/* prevent it from being the active one */
Jiri Slaby 5da0cb
-				bond_set_backup_slave(slave);
Jiri Slaby 5da0cb
 			}
Jiri Slaby 5da0cb
 
Jiri Slaby 5da0cb
 			netdev_info(bond->dev, "link status definitely up for interface %s, %u Mbps %s duplex\n",