summaryrefslogtreecommitdiff
path: root/drivers/net/bonding
diff options
context:
space:
mode:
authorFlavio Leitner <fbl@redhat.com>2011-10-13 07:21:23 +0000
committerDavid S. Miller <davem@davemloft.net>2011-10-19 19:24:14 -0400
commitd5edf2906e0a251ddddd76caeb1b79de8bb5e3b8 (patch)
tree402661e622fe9b3a483c216d717291a4eed63b90 /drivers/net/bonding
parent4dc360c5e7e155373bffbb3c1f7ea0022dee650c (diff)
downloadkernel-common-d5edf2906e0a251ddddd76caeb1b79de8bb5e3b8.tar.gz
kernel-common-d5edf2906e0a251ddddd76caeb1b79de8bb5e3b8.tar.bz2
kernel-common-d5edf2906e0a251ddddd76caeb1b79de8bb5e3b8.zip
bonding: fix wrong port enabling in 802.3ad
The port shouldn't be enabled unless its current MUX state is DISTRIBUTING which is correctly handled by ad_mux_machine(), otherwise the packet sent can be lost because the other end may not be ready. The issue happens on every port initialization, but as the ports are expected to move quickly to DISTRIBUTING, it doesn't cause much problem. However, it does cause constant packet loss if the other peer has the port configured to stay in STANDBY (i.e. SYNC set to OFF). Signed-off-by: Flavio Leitner <fbl@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bonding')
-rw-r--r--drivers/net/bonding/bond_3ad.c7
1 files changed, 0 insertions, 7 deletions
diff --git a/drivers/net/bonding/bond_3ad.c b/drivers/net/bonding/bond_3ad.c
index 47b928ed08f8..b33c099d65a4 100644
--- a/drivers/net/bonding/bond_3ad.c
+++ b/drivers/net/bonding/bond_3ad.c
@@ -1135,13 +1135,6 @@ static void ad_rx_machine(struct lacpdu *lacpdu, struct port *port)
__record_pdu(lacpdu, port);
port->sm_rx_timer_counter = __ad_timer_to_ticks(AD_CURRENT_WHILE_TIMER, (u16)(port->actor_oper_port_state & AD_STATE_LACP_TIMEOUT));
port->actor_oper_port_state &= ~AD_STATE_EXPIRED;
- // verify that if the aggregator is enabled, the port is enabled too.
- //(because if the link goes down for a short time, the 802.3ad will not
- // catch it, and the port will continue to be disabled)
- if (port->aggregator
- && port->aggregator->is_active
- && !__port_is_enabled(port))
- __enable_port(port);
break;
default: //to silence the compiler
break;