Commit 52bc6716 authored by Mahesh Bandewar's avatar Mahesh Bandewar Committed by David S. Miller

bonding: simplify / unify event handling code for 3ad mode.

Old logic of updating state-machine is not required since
ad_update_actor_keys() does it implicitly. The only loss is
the notification differentiation between speed vs. duplex
change. Now only one unified notification is printed.
Signed-off-by: default avatarMahesh Bandewar <maheshb@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7bb11dc9
...@@ -2348,39 +2348,14 @@ static void ad_update_actor_keys(struct port *port, bool reset) ...@@ -2348,39 +2348,14 @@ static void ad_update_actor_keys(struct port *port, bool reset)
} }
/** /**
* bond_3ad_adapter_speed_changed - handle a slave's speed change indication * bond_3ad_adapter_speed_duplex_changed - handle a slave's speed / duplex
* @slave: slave struct to work on * change indication
* *
* Handle reselection of aggregator (if needed) for this port.
*/
void bond_3ad_adapter_speed_changed(struct slave *slave)
{
struct port *port;
port = &(SLAVE_AD_INFO(slave)->port);
/* if slave is null, the whole port is not initialized */
if (!port->slave) {
netdev_warn(slave->bond->dev, "speed changed for uninitialized port on %s\n",
slave->dev->name);
return;
}
spin_lock_bh(&slave->bond->mode_lock);
ad_update_actor_keys(port, false);
netdev_dbg(slave->bond->dev, "Port %d changed speed\n", port->actor_port_number);
spin_unlock_bh(&slave->bond->mode_lock);
}
/**
* bond_3ad_adapter_duplex_changed - handle a slave's duplex change indication
* @slave: slave struct to work on * @slave: slave struct to work on
* *
* Handle reselection of aggregator (if needed) for this port. * Handle reselection of aggregator (if needed) for this port.
*/ */
void bond_3ad_adapter_duplex_changed(struct slave *slave) void bond_3ad_adapter_speed_duplex_changed(struct slave *slave)
{ {
struct port *port; struct port *port;
...@@ -2388,17 +2363,16 @@ void bond_3ad_adapter_duplex_changed(struct slave *slave) ...@@ -2388,17 +2363,16 @@ void bond_3ad_adapter_duplex_changed(struct slave *slave)
/* if slave is null, the whole port is not initialized */ /* if slave is null, the whole port is not initialized */
if (!port->slave) { if (!port->slave) {
netdev_warn(slave->bond->dev, "duplex changed for uninitialized port on %s\n", netdev_warn(slave->bond->dev,
"speed/duplex changed for uninitialized port %s\n",
slave->dev->name); slave->dev->name);
return; return;
} }
spin_lock_bh(&slave->bond->mode_lock); spin_lock_bh(&slave->bond->mode_lock);
ad_update_actor_keys(port, false); ad_update_actor_keys(port, false);
netdev_dbg(slave->bond->dev, "Port %d slave %s changed duplex\n", netdev_dbg(slave->bond->dev, "Port %d slave %s changed speed/duplex\n",
port->actor_port_number, slave->dev->name); port->actor_port_number, slave->dev->name);
spin_unlock_bh(&slave->bond->mode_lock); spin_unlock_bh(&slave->bond->mode_lock);
} }
......
...@@ -2943,8 +2943,6 @@ static int bond_slave_netdev_event(unsigned long event, ...@@ -2943,8 +2943,6 @@ static int bond_slave_netdev_event(unsigned long event,
struct slave *slave = bond_slave_get_rtnl(slave_dev), *primary; struct slave *slave = bond_slave_get_rtnl(slave_dev), *primary;
struct bonding *bond; struct bonding *bond;
struct net_device *bond_dev; struct net_device *bond_dev;
u32 old_speed;
u8 old_duplex;
/* A netdev event can be generated while enslaving a device /* A netdev event can be generated while enslaving a device
* before netdev_rx_handler_register is called in which case * before netdev_rx_handler_register is called in which case
...@@ -2965,17 +2963,9 @@ static int bond_slave_netdev_event(unsigned long event, ...@@ -2965,17 +2963,9 @@ static int bond_slave_netdev_event(unsigned long event,
break; break;
case NETDEV_UP: case NETDEV_UP:
case NETDEV_CHANGE: case NETDEV_CHANGE:
old_speed = slave->speed;
old_duplex = slave->duplex;
bond_update_speed_duplex(slave); bond_update_speed_duplex(slave);
if (BOND_MODE(bond) == BOND_MODE_8023AD)
if (BOND_MODE(bond) == BOND_MODE_8023AD) { bond_3ad_adapter_speed_duplex_changed(slave);
if (old_speed != slave->speed)
bond_3ad_adapter_speed_changed(slave);
if (old_duplex != slave->duplex)
bond_3ad_adapter_duplex_changed(slave);
}
/* Fallthrough */ /* Fallthrough */
case NETDEV_DOWN: case NETDEV_DOWN:
/* Refresh slave-array if applicable! /* Refresh slave-array if applicable!
......
...@@ -297,8 +297,7 @@ void bond_3ad_bind_slave(struct slave *slave); ...@@ -297,8 +297,7 @@ void bond_3ad_bind_slave(struct slave *slave);
void bond_3ad_unbind_slave(struct slave *slave); void bond_3ad_unbind_slave(struct slave *slave);
void bond_3ad_state_machine_handler(struct work_struct *); void bond_3ad_state_machine_handler(struct work_struct *);
void bond_3ad_initiate_agg_selection(struct bonding *bond, int timeout); void bond_3ad_initiate_agg_selection(struct bonding *bond, int timeout);
void bond_3ad_adapter_speed_changed(struct slave *slave); void bond_3ad_adapter_speed_duplex_changed(struct slave *slave);
void bond_3ad_adapter_duplex_changed(struct slave *slave);
void bond_3ad_handle_link_change(struct slave *slave, char link); void bond_3ad_handle_link_change(struct slave *slave, char link);
int bond_3ad_get_active_agg_info(struct bonding *bond, struct ad_info *ad_info); int bond_3ad_get_active_agg_info(struct bonding *bond, struct ad_info *ad_info);
int __bond_3ad_get_active_agg_info(struct bonding *bond, int __bond_3ad_get_active_agg_info(struct bonding *bond,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment