[PATCH net] bonding: 802.3ad: Avoid packet loss when switching aggregator

From: Thomas Bogendoerfer
Date: Thu Apr 04 2024 - 07:49:32 EST


If selection logic decides to switch to a new aggregator it disables
all ports of the old aggregator, but doesn't enable ports on
the new aggregator. These ports will eventually be enabled when
the next LACPDU is received, which might take some time and without an
active port transmitted frames are dropped. Avoid this by enabling
already collected ports of the new aggregator immediately.

Signed-off-by: Thomas Bogendoerfer <tbogendoerfer@xxxxxxx>
---
drivers/net/bonding/bond_3ad.c | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c
index c6807e473ab7..529e2a7c51e2 100644
--- a/drivers/net/bonding/bond_3ad.c
+++ b/drivers/net/bonding/bond_3ad.c
@@ -1876,6 +1876,13 @@ static void ad_agg_selection_logic(struct aggregator *agg,
__disable_port(port);
}
}
+
+ /* enable ports on new active aggregator */
+ for (port = best->lag_ports; port;
+ port = port->next_port_in_aggregator) {
+ __enable_port(port);
+ }
+
/* Slave array needs update. */
*update_slave_arr = true;
}
--
2.35.3