Commit 825d2c50 authored by David S. Miller's avatar David S. Miller

Merge branch 'bonding-winter-cleanup'

Mahesh Bandewar says:

====================
bonding: winter cleanup

Few cleanup patches that I have accumulated over some time now.

(a) First two patches are basically to move the work-queue initialization
    from every ndo_open / bond_open operation to once at the beginning while
    port creation. Work-queue initialization is an unnecessary operation
    for every 'ifup' operation. However we have some mode-specific work-queues
    and mode can change anytime after port creation. So the second patch is
    to ensure the correct work-handler is called based on the mode.

(b) Third patch is simple and straightforward that removes hard-coded value
    that was added into the initial commit and replaces it with the default
    value configured.

(c) The final patch in the series removes the unimplemented "port-moved" state
    from the LACP state machine. This state is defined but never set so
    removing from the state machine logic makes code little cleaner.

(d) Reduce scope of some global variables to local.

Note: None of these patches are making any functional changes.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 96d7552e dc9c4d0f
...@@ -1052,8 +1052,7 @@ static void ad_rx_machine(struct lacpdu *lacpdu, struct port *port) ...@@ -1052,8 +1052,7 @@ static void ad_rx_machine(struct lacpdu *lacpdu, struct port *port)
port->sm_rx_state = AD_RX_INITIALIZE; port->sm_rx_state = AD_RX_INITIALIZE;
port->sm_vars |= AD_PORT_CHURNED; port->sm_vars |= AD_PORT_CHURNED;
/* check if port is not enabled */ /* check if port is not enabled */
} else if (!(port->sm_vars & AD_PORT_BEGIN) } else if (!(port->sm_vars & AD_PORT_BEGIN) && !port->is_enabled)
&& !port->is_enabled && !(port->sm_vars & AD_PORT_MOVED))
port->sm_rx_state = AD_RX_PORT_DISABLED; port->sm_rx_state = AD_RX_PORT_DISABLED;
/* check if new lacpdu arrived */ /* check if new lacpdu arrived */
else if (lacpdu && ((port->sm_rx_state == AD_RX_EXPIRED) || else if (lacpdu && ((port->sm_rx_state == AD_RX_EXPIRED) ||
...@@ -1081,11 +1080,8 @@ static void ad_rx_machine(struct lacpdu *lacpdu, struct port *port) ...@@ -1081,11 +1080,8 @@ static void ad_rx_machine(struct lacpdu *lacpdu, struct port *port)
/* if no lacpdu arrived and no timer is on */ /* if no lacpdu arrived and no timer is on */
switch (port->sm_rx_state) { switch (port->sm_rx_state) {
case AD_RX_PORT_DISABLED: case AD_RX_PORT_DISABLED:
if (port->sm_vars & AD_PORT_MOVED) if (port->is_enabled &&
port->sm_rx_state = AD_RX_INITIALIZE; (port->sm_vars & AD_PORT_LACP_ENABLED))
else if (port->is_enabled
&& (port->sm_vars
& AD_PORT_LACP_ENABLED))
port->sm_rx_state = AD_RX_EXPIRED; port->sm_rx_state = AD_RX_EXPIRED;
else if (port->is_enabled else if (port->is_enabled
&& ((port->sm_vars && ((port->sm_vars
...@@ -1115,7 +1111,6 @@ static void ad_rx_machine(struct lacpdu *lacpdu, struct port *port) ...@@ -1115,7 +1111,6 @@ static void ad_rx_machine(struct lacpdu *lacpdu, struct port *port)
port->sm_vars &= ~AD_PORT_SELECTED; port->sm_vars &= ~AD_PORT_SELECTED;
__record_default(port); __record_default(port);
port->actor_oper_port_state &= ~AD_STATE_EXPIRED; port->actor_oper_port_state &= ~AD_STATE_EXPIRED;
port->sm_vars &= ~AD_PORT_MOVED;
port->sm_rx_state = AD_RX_PORT_DISABLED; port->sm_rx_state = AD_RX_PORT_DISABLED;
/* Fall Through */ /* Fall Through */
......
...@@ -201,12 +201,6 @@ atomic_t netpoll_block_tx = ATOMIC_INIT(0); ...@@ -201,12 +201,6 @@ atomic_t netpoll_block_tx = ATOMIC_INIT(0);
unsigned int bond_net_id __read_mostly; unsigned int bond_net_id __read_mostly;
static __be32 arp_target[BOND_MAX_ARP_TARGETS];
static int arp_ip_count;
static int bond_mode = BOND_MODE_ROUNDROBIN;
static int xmit_hashtype = BOND_XMIT_POLICY_LAYER2;
static int lacp_fast;
/*-------------------------- Forward declarations ---------------------------*/ /*-------------------------- Forward declarations ---------------------------*/
static int bond_init(struct net_device *bond_dev); static int bond_init(struct net_device *bond_dev);
...@@ -2575,10 +2569,8 @@ static bool bond_time_in_interval(struct bonding *bond, unsigned long last_act, ...@@ -2575,10 +2569,8 @@ static bool bond_time_in_interval(struct bonding *bond, unsigned long last_act,
* arp is transmitted to generate traffic. see activebackup_arp_monitor for * arp is transmitted to generate traffic. see activebackup_arp_monitor for
* arp monitoring in active backup mode. * arp monitoring in active backup mode.
*/ */
static void bond_loadbalance_arp_mon(struct work_struct *work) static void bond_loadbalance_arp_mon(struct bonding *bond)
{ {
struct bonding *bond = container_of(work, struct bonding,
arp_work.work);
struct slave *slave, *oldcurrent; struct slave *slave, *oldcurrent;
struct list_head *iter; struct list_head *iter;
int do_failover = 0, slave_state_changed = 0; int do_failover = 0, slave_state_changed = 0;
...@@ -2916,10 +2908,8 @@ static bool bond_ab_arp_probe(struct bonding *bond) ...@@ -2916,10 +2908,8 @@ static bool bond_ab_arp_probe(struct bonding *bond)
return should_notify_rtnl; return should_notify_rtnl;
} }
static void bond_activebackup_arp_mon(struct work_struct *work) static void bond_activebackup_arp_mon(struct bonding *bond)
{ {
struct bonding *bond = container_of(work, struct bonding,
arp_work.work);
bool should_notify_peers = false; bool should_notify_peers = false;
bool should_notify_rtnl = false; bool should_notify_rtnl = false;
int delta_in_ticks; int delta_in_ticks;
...@@ -2972,6 +2962,17 @@ static void bond_activebackup_arp_mon(struct work_struct *work) ...@@ -2972,6 +2962,17 @@ static void bond_activebackup_arp_mon(struct work_struct *work)
} }
} }
static void bond_arp_monitor(struct work_struct *work)
{
struct bonding *bond = container_of(work, struct bonding,
arp_work.work);
if (BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP)
bond_activebackup_arp_mon(bond);
else
bond_loadbalance_arp_mon(bond);
}
/*-------------------------- netdev event handling --------------------------*/ /*-------------------------- netdev event handling --------------------------*/
/* Change device name */ /* Change device name */
...@@ -3228,10 +3229,7 @@ static void bond_work_init_all(struct bonding *bond) ...@@ -3228,10 +3229,7 @@ static void bond_work_init_all(struct bonding *bond)
bond_resend_igmp_join_requests_delayed); bond_resend_igmp_join_requests_delayed);
INIT_DELAYED_WORK(&bond->alb_work, bond_alb_monitor); INIT_DELAYED_WORK(&bond->alb_work, bond_alb_monitor);
INIT_DELAYED_WORK(&bond->mii_work, bond_mii_monitor); INIT_DELAYED_WORK(&bond->mii_work, bond_mii_monitor);
if (BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP) INIT_DELAYED_WORK(&bond->arp_work, bond_arp_monitor);
INIT_DELAYED_WORK(&bond->arp_work, bond_activebackup_arp_mon);
else
INIT_DELAYED_WORK(&bond->arp_work, bond_loadbalance_arp_mon);
INIT_DELAYED_WORK(&bond->ad_work, bond_3ad_state_machine_handler); INIT_DELAYED_WORK(&bond->ad_work, bond_3ad_state_machine_handler);
INIT_DELAYED_WORK(&bond->slave_arr_work, bond_slave_arr_handler); INIT_DELAYED_WORK(&bond->slave_arr_work, bond_slave_arr_handler);
} }
...@@ -3266,8 +3264,6 @@ static int bond_open(struct net_device *bond_dev) ...@@ -3266,8 +3264,6 @@ static int bond_open(struct net_device *bond_dev)
} }
} }
bond_work_init_all(bond);
if (bond_is_lb(bond)) { if (bond_is_lb(bond)) {
/* bond_alb_initialize must be called before the timer /* bond_alb_initialize must be called before the timer
* is started. * is started.
...@@ -4252,6 +4248,12 @@ static int bond_check_params(struct bond_params *params) ...@@ -4252,6 +4248,12 @@ static int bond_check_params(struct bond_params *params)
int arp_all_targets_value; int arp_all_targets_value;
u16 ad_actor_sys_prio = 0; u16 ad_actor_sys_prio = 0;
u16 ad_user_port_key = 0; u16 ad_user_port_key = 0;
__be32 arp_target[BOND_MAX_ARP_TARGETS];
int arp_ip_count;
int bond_mode = BOND_MODE_ROUNDROBIN;
int xmit_hashtype = BOND_XMIT_POLICY_LAYER2;
int lacp_fast = 0;
int tlb_dynamic_lb = 0;
/* Convert string parameters. */ /* Convert string parameters. */
if (mode) { if (mode) {
...@@ -4564,6 +4566,17 @@ static int bond_check_params(struct bond_params *params) ...@@ -4564,6 +4566,17 @@ static int bond_check_params(struct bond_params *params)
} }
ad_user_port_key = valptr->value; ad_user_port_key = valptr->value;
if (bond_mode == BOND_MODE_TLB) {
bond_opt_initstr(&newval, "default");
valptr = bond_opt_parse(bond_opt_get(BOND_OPT_TLB_DYNAMIC_LB),
&newval);
if (!valptr) {
pr_err("Error: No tlb_dynamic_lb default value");
return -EINVAL;
}
tlb_dynamic_lb = valptr->value;
}
if (lp_interval == 0) { if (lp_interval == 0) {
pr_warn("Warning: ip_interval must be between 1 and %d, so it was reset to %d\n", pr_warn("Warning: ip_interval must be between 1 and %d, so it was reset to %d\n",
INT_MAX, BOND_ALB_DEFAULT_LP_INTERVAL); INT_MAX, BOND_ALB_DEFAULT_LP_INTERVAL);
...@@ -4591,7 +4604,7 @@ static int bond_check_params(struct bond_params *params) ...@@ -4591,7 +4604,7 @@ static int bond_check_params(struct bond_params *params)
params->min_links = min_links; params->min_links = min_links;
params->lp_interval = lp_interval; params->lp_interval = lp_interval;
params->packets_per_slave = packets_per_slave; params->packets_per_slave = packets_per_slave;
params->tlb_dynamic_lb = 1; /* Default value */ params->tlb_dynamic_lb = tlb_dynamic_lb;
params->ad_actor_sys_prio = ad_actor_sys_prio; params->ad_actor_sys_prio = ad_actor_sys_prio;
eth_zero_addr(params->ad_actor_system); eth_zero_addr(params->ad_actor_system);
params->ad_user_port_key = ad_user_port_key; params->ad_user_port_key = ad_user_port_key;
...@@ -4687,6 +4700,8 @@ int bond_create(struct net *net, const char *name) ...@@ -4687,6 +4700,8 @@ int bond_create(struct net *net, const char *name)
netif_carrier_off(bond_dev); netif_carrier_off(bond_dev);
bond_work_init_all(bond);
rtnl_unlock(); rtnl_unlock();
if (res < 0) if (res < 0)
bond_destructor(bond_dev); bond_destructor(bond_dev);
......
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