Commit 56d00c67 authored by Peter Pan(潘卫平)'s avatar Peter Pan(潘卫平) Committed by David S. Miller

bonding:delete lacp_fast from ad_bond_info

These is also a bug, that if you modify lacp_rate via sysfs,
and add new slaves in bonding, new slaves won't use the latest lacp_rate,
since ad_bond_info->lacp_fast is initialized only once,
in bond_3ad_initialize().

Since both struct bond_params and ad_bond_info have lacp_fast,
they are duplicate and need extra synchronization.

bond_3ad_bind_slave() can use bond_params->lacp_fast to initialize port.
So we can just remove lacp_fast from struct ad_bond_info.
Signed-off-by: default avatarWeiping Pan <panweiping3@gmail.com>
Signed-off-by: default avatarJay Vosburgh <fubar@us.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ba824a8b
...@@ -1868,11 +1868,10 @@ static u16 aggregator_identifier; ...@@ -1868,11 +1868,10 @@ static u16 aggregator_identifier;
* bond_3ad_initialize - initialize a bond's 802.3ad parameters and structures * bond_3ad_initialize - initialize a bond's 802.3ad parameters and structures
* @bond: bonding struct to work on * @bond: bonding struct to work on
* @tick_resolution: tick duration (millisecond resolution) * @tick_resolution: tick duration (millisecond resolution)
* @lacp_fast: boolean. whether fast periodic should be used
* *
* Can be called only after the mac address of the bond is set. * Can be called only after the mac address of the bond is set.
*/ */
void bond_3ad_initialize(struct bonding *bond, u16 tick_resolution, int lacp_fast) void bond_3ad_initialize(struct bonding *bond, u16 tick_resolution)
{ {
// check that the bond is not initialized yet // check that the bond is not initialized yet
if (MAC_ADDRESS_COMPARE(&(BOND_AD_INFO(bond).system.sys_mac_addr), if (MAC_ADDRESS_COMPARE(&(BOND_AD_INFO(bond).system.sys_mac_addr),
...@@ -1880,7 +1879,6 @@ void bond_3ad_initialize(struct bonding *bond, u16 tick_resolution, int lacp_fas ...@@ -1880,7 +1879,6 @@ void bond_3ad_initialize(struct bonding *bond, u16 tick_resolution, int lacp_fas
aggregator_identifier = 0; aggregator_identifier = 0;
BOND_AD_INFO(bond).lacp_fast = lacp_fast;
BOND_AD_INFO(bond).system.sys_priority = 0xFFFF; BOND_AD_INFO(bond).system.sys_priority = 0xFFFF;
BOND_AD_INFO(bond).system.sys_mac_addr = *((struct mac_addr *)bond->dev->dev_addr); BOND_AD_INFO(bond).system.sys_mac_addr = *((struct mac_addr *)bond->dev->dev_addr);
...@@ -1903,6 +1901,7 @@ void bond_3ad_initialize(struct bonding *bond, u16 tick_resolution, int lacp_fas ...@@ -1903,6 +1901,7 @@ void bond_3ad_initialize(struct bonding *bond, u16 tick_resolution, int lacp_fas
int bond_3ad_bind_slave(struct slave *slave) int bond_3ad_bind_slave(struct slave *slave)
{ {
struct bonding *bond = bond_get_bond_by_slave(slave); struct bonding *bond = bond_get_bond_by_slave(slave);
int lacp_fast = bond->params.lacp_fast;
struct port *port; struct port *port;
struct aggregator *aggregator; struct aggregator *aggregator;
...@@ -1918,7 +1917,7 @@ int bond_3ad_bind_slave(struct slave *slave) ...@@ -1918,7 +1917,7 @@ int bond_3ad_bind_slave(struct slave *slave)
// port initialization // port initialization
port = &(SLAVE_AD_INFO(slave).port); port = &(SLAVE_AD_INFO(slave).port);
ad_initialize_port(port, BOND_AD_INFO(bond).lacp_fast); ad_initialize_port(port, lacp_fast);
port->slave = slave; port->slave = slave;
port->actor_port_number = SLAVE_AD_INFO(slave).id; port->actor_port_number = SLAVE_AD_INFO(slave).id;
......
...@@ -254,9 +254,6 @@ struct ad_bond_info { ...@@ -254,9 +254,6 @@ struct ad_bond_info {
struct ad_system system; /* 802.3ad system structure */ struct ad_system system; /* 802.3ad system structure */
u32 agg_select_timer; // Timer to select aggregator after all adapter's hand shakes u32 agg_select_timer; // Timer to select aggregator after all adapter's hand shakes
u32 agg_select_mode; // Mode of selection of active aggregator(bandwidth/count) u32 agg_select_mode; // Mode of selection of active aggregator(bandwidth/count)
int lacp_fast; /* whether fast periodic tx should be
* requested
*/
struct timer_list ad_timer; struct timer_list ad_timer;
}; };
...@@ -269,7 +266,7 @@ struct ad_slave_info { ...@@ -269,7 +266,7 @@ struct ad_slave_info {
}; };
// ================= AD Exported functions to the main bonding code ================== // ================= AD Exported functions to the main bonding code ==================
void bond_3ad_initialize(struct bonding *bond, u16 tick_resolution, int lacp_fast); void bond_3ad_initialize(struct bonding *bond, u16 tick_resolution);
int bond_3ad_bind_slave(struct slave *slave); int 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 *);
......
...@@ -1843,8 +1843,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) ...@@ -1843,8 +1843,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
/* Initialize AD with the number of times that the AD timer is called in 1 second /* Initialize AD with the number of times that the AD timer is called in 1 second
* can be called only after the mac address of the bond is set * can be called only after the mac address of the bond is set
*/ */
bond_3ad_initialize(bond, 1000/AD_TIMER_INTERVAL, bond_3ad_initialize(bond, 1000/AD_TIMER_INTERVAL);
bond->params.lacp_fast);
} else { } else {
SLAVE_AD_INFO(new_slave).id = SLAVE_AD_INFO(new_slave).id =
SLAVE_AD_INFO(new_slave->prev).id + 1; SLAVE_AD_INFO(new_slave->prev).id + 1;
......
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