diff options
author | Neal Cardwell <ncardwell@google.com> | 2011-11-16 08:58:04 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-11-27 18:54:09 -0500 |
commit | f698204bd0bfdc645642e271da117b56b795aee0 (patch) | |
tree | a08c3714c3f1e0e523db799d0455b9e9b17fa8ab /drivers/watchdog | |
parent | e95ae2f2cf10f7bf27b492aa6188f3cd745de162 (diff) | |
download | linux-f698204bd0bfdc645642e271da117b56b795aee0.tar.bz2 |
tcp: allow undo from reordered DSACKs
Previously, SACK-enabled connections hung around in TCP_CA_Disorder
state while snd_una==high_seq, just waiting to accumulate DSACKs and
hopefully undo a cwnd reduction. This could and did lead to the
following unfortunate scenario: if some incoming ACKs advance snd_una
beyond high_seq then we were setting undo_marker to 0 and moving to
TCP_CA_Open, so if (due to reordering in the ACK return path) we
shortly thereafter received a DSACK then we were no longer able to
undo the cwnd reduction.
The change: Simplify the congestion avoidance state machine by
removing the behavior where SACK-enabled connections hung around in
the TCP_CA_Disorder state just waiting for DSACKs. Instead, when
snd_una advances to high_seq or beyond we typically move to
TCP_CA_Open immediately and allow an undo in either TCP_CA_Open or
TCP_CA_Disorder if we later receive enough DSACKs.
Other patches in this series will provide other changes that are
necessary to fully fix this problem.
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/watchdog')
0 files changed, 0 insertions, 0 deletions