On Fri, Jul 25, 2025 at 12:02:02PM +0300, Nikolay Aleksandrov wrote:
diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c index 4a1b2f01fe37..6f8a406ed34a 100644 --- a/drivers/net/bonding/bond_3ad.c +++ b/drivers/net/bonding/bond_3ad.c @@ -747,6 +747,20 @@ static int __agg_active_ports(struct aggregator *agg) return active; } +static unsigned int __agg_ports_priority(struct aggregator *agg)
const agg?
+{
- struct port *port;
- unsigned int prio = 0;
reverse xmas tree or alternatively you can save a line below with port = agg->lag_ports above
Thanks, I will fix this.
Hangbin
- for (port = agg->lag_ports; port;
port = port->next_port_in_aggregator) {
if (port->is_enabled)
prio += port->actor_port_priority;
- }
minor nit: {} are unnecessary
- return prio;
+}
/**
- __get_agg_bandwidth - get the total bandwidth of an aggregator
- @aggregator: the aggregator we're looking at
@@ -1695,6 +1709,9 @@ static struct aggregator *ad_agg_selection_test(struct aggregator *best, * BOND_AD_COUNT: Select by count of ports. If count is equal, * select by bandwidth. *
* BOND_AD_PRIO: Select by total priority of ports. If priority
* is equal, select by count.
*
*/ if (!best)
- BOND_AD_STABLE, BOND_AD_BANDWIDTH: Select by bandwidth.
@@ -1713,6 +1730,14 @@ static struct aggregator *ad_agg_selection_test(struct aggregator *best, return best; switch (__get_agg_selection_mode(curr->lag_ports)) {
- case BOND_AD_PRIO:
if (__agg_ports_priority(curr) > __agg_ports_priority(best))
return curr;
if (__agg_ports_priority(curr) < __agg_ports_priority(best))
return best;
case BOND_AD_COUNT: if (__agg_active_ports(curr) > __agg_active_ports(best)) return curr;fallthrough;
@@ -1778,6 +1803,10 @@ static int agg_device_up(const struct aggregator *agg)
- (slaves), and reselect whenever a link state change takes place or the
- set of slaves in the bond changes.
- BOND_AD_PRIO: select the aggregator with highest total priority of ports
- (slaves), and reselect whenever a link state change takes place or the
- set of slaves in the bond changes.
- FIXME: this function MUST be called with the first agg in the bond, or
- __get_active_agg() won't work correctly. This function should be better
- called with the bond itself, and retrieve the first agg from it.
diff --git a/drivers/net/bonding/bond_options.c b/drivers/net/bonding/bond_options.c index 2b8606b4e4f5..708ca1f18a00 100644 --- a/drivers/net/bonding/bond_options.c +++ b/drivers/net/bonding/bond_options.c @@ -163,6 +163,7 @@ static const struct bond_opt_value bond_ad_select_tbl[] = { { "stable", BOND_AD_STABLE, BOND_VALFLAG_DEFAULT}, { "bandwidth", BOND_AD_BANDWIDTH, 0}, { "count", BOND_AD_COUNT, 0},
- { "prio", BOND_AD_PRIO, 0}, { NULL, -1, 0},
}; diff --git a/include/net/bond_3ad.h b/include/net/bond_3ad.h index bf551ca70359..34495df965f0 100644 --- a/include/net/bond_3ad.h +++ b/include/net/bond_3ad.h @@ -26,6 +26,7 @@ enum { BOND_AD_STABLE = 0, BOND_AD_BANDWIDTH = 1, BOND_AD_COUNT = 2,
- BOND_AD_PRIO = 3,
}; /* rx machine states(43.4.11 in the 802.3ad standard) */