]> git.droids-corp.org - dpdk.git/commitdiff
bonding: fix active slaves with no primary
authorEric Kinzie <ekinzie@brocade.com>
Tue, 1 Mar 2016 17:32:01 +0000 (09:32 -0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 16 Mar 2016 18:05:47 +0000 (19:05 +0100)
If the link state of a slave is "up" when added, it is added to the list
of active slaves but, even if it is the only slave, is not selected as
the primary interface.  Generally, handling of link state interrupts
selects an interface to be primary, but only if the active count is zero.
This change avoids the situation where there are active slaves but
no primary.

Fixes: 2efb58cbab6e ("bond: new link bonding library")
Signed-off-by: Eric Kinzie <ekinzie@brocade.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Declan Doherty <declan.doherty@intel.com>
drivers/net/bonding/rte_eth_bond_api.c

index a0995ec8aa3cc043b95a2afbf43a1d7065d94773..5292ae19b92be30938d701c79b44efdd29e4cd35 100644 (file)
@@ -419,8 +419,13 @@ __eth_bond_slave_add_lock_free(uint8_t bonded_port_id, uint8_t slave_port_id)
        if (bonded_eth_dev->data->dev_started) {
                rte_eth_link_get_nowait(slave_port_id, &link_props);
 
-                if (link_props.link_status == 1)
+                if (link_props.link_status == 1) {
+                       if (internals->active_slave_count == 0 &&
+                           !internals->user_defined_primary_port)
+                               bond_ethdev_primary_set(internals,
+                                                       slave_port_id);
                        activate_slave(bonded_eth_dev, slave_port_id);
+               }
        }
        return 0;