]> git.ipfire.org Git - thirdparty/kernel/stable.git/blobdiff - drivers/net/bonding/bond_main.c
bonding/802.3ad: fix slave link initialization transition states
[thirdparty/kernel/stable.git] / drivers / net / bonding / bond_main.c
index f89fc6ea60783b115d109d70eecd58ba2228dd69..4eeece3576e1cac11a9f20a5c5408d7afdff792f 100644 (file)
@@ -3123,13 +3123,18 @@ static int bond_slave_netdev_event(unsigned long event,
        case NETDEV_CHANGE:
                /* For 802.3ad mode only:
                 * Getting invalid Speed/Duplex values here will put slave
-                * in weird state. So mark it as link-fail for the time
-                * being and let link-monitoring (miimon) set it right when
-                * correct speeds/duplex are available.
+                * in weird state. Mark it as link-fail if the link was
+                * previously up or link-down if it hasn't yet come up, and
+                * let link-monitoring (miimon) set it right when correct
+                * speeds/duplex are available.
                 */
                if (bond_update_speed_duplex(slave) &&
-                   BOND_MODE(bond) == BOND_MODE_8023AD)
-                       slave->link = BOND_LINK_FAIL;
+                   BOND_MODE(bond) == BOND_MODE_8023AD) {
+                       if (slave->last_link_up)
+                               slave->link = BOND_LINK_FAIL;
+                       else
+                               slave->link = BOND_LINK_DOWN;
+               }
 
                if (BOND_MODE(bond) == BOND_MODE_8023AD)
                        bond_3ad_adapter_speed_duplex_changed(slave);