50 lines
1.8 KiB
Diff
50 lines
1.8 KiB
Diff
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
|
|
|
Forwarded: n/a (already upstream)
|
|
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
|
Last-Update: 2016-03-20
|
|
|
|
From 8997a10bfcad789d000debaac4cd85cd3db57997 Mon Sep 17 00:00:00 2001
|
|
From: Eric Kinzie <ekinzie@brocade.com>
|
|
Date: Tue, 1 Mar 2016 09:32:01 -0800
|
|
Subject: [PATCH] bonding: fix active slaves with no primary
|
|
|
|
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 | 7 ++++++-
|
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c
|
|
index a0995ec..5292ae1 100644
|
|
--- a/drivers/net/bonding/rte_eth_bond_api.c
|
|
+++ b/drivers/net/bonding/rte_eth_bond_api.c
|
|
@@ -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;
|
|
|
|
--
|
|
2.7.3
|
|
|