mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
bonding: update LACP activity flag after setting lacp_active
The port's actor_oper_port_state activity flag should be updated immediately
after changing the lacp_active option to reflect the current mode correctly.
Fixes: 3a755cd8b7
("bonding: add new option lacp_active")
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Link: https://patch.msgid.link/20250815062000.22220-2-liuhangbin@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
c42be53454
commit
b64d035f77
@ -2883,6 +2883,31 @@ void bond_3ad_update_lacp_rate(struct bonding *bond)
|
|||||||
spin_unlock_bh(&bond->mode_lock);
|
spin_unlock_bh(&bond->mode_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* bond_3ad_update_lacp_active - change the lacp active
|
||||||
|
* @bond: bonding struct
|
||||||
|
*
|
||||||
|
* Update actor_oper_port_state when lacp_active is modified.
|
||||||
|
*/
|
||||||
|
void bond_3ad_update_lacp_active(struct bonding *bond)
|
||||||
|
{
|
||||||
|
struct port *port = NULL;
|
||||||
|
struct list_head *iter;
|
||||||
|
struct slave *slave;
|
||||||
|
int lacp_active;
|
||||||
|
|
||||||
|
lacp_active = bond->params.lacp_active;
|
||||||
|
spin_lock_bh(&bond->mode_lock);
|
||||||
|
bond_for_each_slave(bond, slave, iter) {
|
||||||
|
port = &(SLAVE_AD_INFO(slave)->port);
|
||||||
|
if (lacp_active)
|
||||||
|
port->actor_oper_port_state |= LACP_STATE_LACP_ACTIVITY;
|
||||||
|
else
|
||||||
|
port->actor_oper_port_state &= ~LACP_STATE_LACP_ACTIVITY;
|
||||||
|
}
|
||||||
|
spin_unlock_bh(&bond->mode_lock);
|
||||||
|
}
|
||||||
|
|
||||||
size_t bond_3ad_stats_size(void)
|
size_t bond_3ad_stats_size(void)
|
||||||
{
|
{
|
||||||
return nla_total_size_64bit(sizeof(u64)) + /* BOND_3AD_STAT_LACPDU_RX */
|
return nla_total_size_64bit(sizeof(u64)) + /* BOND_3AD_STAT_LACPDU_RX */
|
||||||
|
@ -1660,6 +1660,7 @@ static int bond_option_lacp_active_set(struct bonding *bond,
|
|||||||
netdev_dbg(bond->dev, "Setting LACP active to %s (%llu)\n",
|
netdev_dbg(bond->dev, "Setting LACP active to %s (%llu)\n",
|
||||||
newval->string, newval->value);
|
newval->string, newval->value);
|
||||||
bond->params.lacp_active = newval->value;
|
bond->params.lacp_active = newval->value;
|
||||||
|
bond_3ad_update_lacp_active(bond);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -307,6 +307,7 @@ int bond_3ad_lacpdu_recv(const struct sk_buff *skb, struct bonding *bond,
|
|||||||
struct slave *slave);
|
struct slave *slave);
|
||||||
int bond_3ad_set_carrier(struct bonding *bond);
|
int bond_3ad_set_carrier(struct bonding *bond);
|
||||||
void bond_3ad_update_lacp_rate(struct bonding *bond);
|
void bond_3ad_update_lacp_rate(struct bonding *bond);
|
||||||
|
void bond_3ad_update_lacp_active(struct bonding *bond);
|
||||||
void bond_3ad_update_ad_actor_settings(struct bonding *bond);
|
void bond_3ad_update_ad_actor_settings(struct bonding *bond);
|
||||||
int bond_3ad_stats_fill(struct sk_buff *skb, struct bond_3ad_stats *stats);
|
int bond_3ad_stats_fill(struct sk_buff *skb, struct bond_3ad_stats *stats);
|
||||||
size_t bond_3ad_stats_size(void);
|
size_t bond_3ad_stats_size(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user