Denis Kirjanov b8799d
From 1c9e6fb6adff458df2916c581526aa4ca3bcbe56 Mon Sep 17 00:00:00 2001
Denis Kirjanov b8799d
From: Mahesh Bandewar <maheshb@google.com>
Denis Kirjanov b8799d
Date: Mon, 7 Feb 2022 14:29:01 -0800
Denis Kirjanov b8799d
Subject: [PATCH 1/8] bonding: pair enable_port with slave_arr_updates
Denis Kirjanov b8799d
Git-commit: 23de0d7b6f0e3f9a6283a882594c479949da1120
Denis Kirjanov b8799d
Patch-mainline: v5.17-rc4
Denis Kirjanov b8799d
References: git-fixes
Denis Kirjanov b8799d
Denis Kirjanov b8799d
When 803.2ad mode enables a participating port, it should update
Denis Kirjanov b8799d
the slave-array. I have observed that the member links are participating
Denis Kirjanov b8799d
and are part of the active aggregator while the traffic is egressing via
Denis Kirjanov b8799d
only one member link (in a case where two links are participating). Via
Denis Kirjanov b8799d
kprobes I discovered that slave-arr has only one link added while
Denis Kirjanov b8799d
the other participating link wasn't part of the slave-arr.
Denis Kirjanov b8799d
Denis Kirjanov b8799d
I couldn't see what caused that situation but the simple code-walk
Denis Kirjanov b8799d
through provided me hints that the enable_port wasn't always associated
Denis Kirjanov b8799d
with the slave-array update.
Denis Kirjanov b8799d
Denis Kirjanov b8799d
Fixes: ee6377147409 ("bonding: Simplify the xmit function for modes that use xmit_hash")
Denis Kirjanov b8799d
Signed-off-by: Mahesh Bandewar <maheshb@google.com>
Denis Kirjanov b8799d
Acked-by: Jay Vosburgh <jay.vosburgh@canonical.com>
Denis Kirjanov b8799d
Link: https://lore.kernel.org/r/20220207222901.1795287-1-maheshb@google.com
Denis Kirjanov b8799d
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Denis Kirjanov b8799d
Signed-off-by: Denis Kirjanov <denis.kirjanov@suse.com>
Denis Kirjanov b8799d
---
Denis Kirjanov b8799d
 drivers/net/bonding/bond_3ad.c | 3 ++-
Denis Kirjanov b8799d
 1 file changed, 2 insertions(+), 1 deletion(-)
Denis Kirjanov b8799d
Denis Kirjanov b8799d
diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c
Denis Kirjanov b8799d
index 69b4eaca8956..e08d479f4d07 100644
Denis Kirjanov b8799d
--- a/drivers/net/bonding/bond_3ad.c
Denis Kirjanov b8799d
+++ b/drivers/net/bonding/bond_3ad.c
Denis Kirjanov b8799d
@@ -1007,8 +1007,8 @@ static void ad_mux_machine(struct port *port, bool *update_slave_arr)
Denis Kirjanov b8799d
 				if (port->aggregator &&
Denis Kirjanov b8799d
 				    port->aggregator->is_active &&
Denis Kirjanov b8799d
 				    !__port_is_enabled(port)) {
Denis Kirjanov b8799d
-
Denis Kirjanov b8799d
 					__enable_port(port);
Denis Kirjanov b8799d
+					*update_slave_arr = true;
Denis Kirjanov b8799d
 				}
Denis Kirjanov b8799d
 			}
Denis Kirjanov b8799d
 			break;
Denis Kirjanov b8799d
@@ -1755,6 +1755,7 @@ static void ad_agg_selection_logic(struct aggregator *agg,
Denis Kirjanov b8799d
 			     port = port->next_port_in_aggregator) {
Denis Kirjanov b8799d
 				__enable_port(port);
Denis Kirjanov b8799d
 			}
Denis Kirjanov b8799d
+			*update_slave_arr = true;
Denis Kirjanov b8799d
 		}
Denis Kirjanov b8799d
 	}
Denis Kirjanov b8799d
 
Denis Kirjanov b8799d
-- 
Denis Kirjanov b8799d
2.16.4
Denis Kirjanov b8799d