From: Sven Eckelmann <sven@narfation.org>
batadv_v_neigh_is_sob() implements the metric (throughput) similarity check
as:
neigh2 (the reference) has a better throughput than 3/4 of the neigh1
(candidate) throughput
But this results in a selection of bonding candidates in
batadv_find_router() which have a really low throughput. But the goal must
be to select candidates which have a good throughput.
The neigh1/neigh2 operands must be swapped in the comparison to use the
reference as such and select only neighbor+interface combinations with good
throughput.
Reported-by: Sashiko <sashiko-bot@kernel.org>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
---
net/batman-adv/bat_v.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/net/batman-adv/bat_v.c b/net/batman-adv/bat_v.c
index 0c27447cf6889..2d3045733db1d 100644
--- a/net/batman-adv/bat_v.c
+++ b/net/batman-adv/bat_v.c
@@ -519,8 +519,8 @@ static int batadv_v_neigh_cmp(struct batadv_neigh_node *neigh1,
* @neigh2: second neighbour to compare
* @if_outgoing2: outgoing interface to use for @neigh2
*
- * Return: true if the throughput of @neigh2 is at least 3/4 of the
- * @neigh1 throughput
+ * Return: true if the throughput of @neigh1 is at least 3/4 of the
+ * @neigh2 throughput
*/
static bool batadv_v_neigh_is_sob(struct batadv_neigh_node *neigh1,
struct batadv_hard_iface *if_outgoing1,
@@ -540,10 +540,10 @@ static bool batadv_v_neigh_is_sob(struct batadv_neigh_node *neigh1,
if (!ifinfo2)
goto err_ifinfo2;
- threshold = ifinfo1->bat_v.throughput / 4;
- threshold = ifinfo1->bat_v.throughput - threshold;
+ threshold = ifinfo2->bat_v.throughput / 4;
+ threshold = ifinfo2->bat_v.throughput - threshold;
- ret = ifinfo2->bat_v.throughput > threshold;
+ ret = ifinfo1->bat_v.throughput > threshold;
batadv_neigh_ifinfo_put(ifinfo2);
err_ifinfo2:
--
2.47.3