[TCP]: Keep state in Disorder also if only lost_out > 0
authorIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
Sat, 7 Jul 2007 10:39:02 +0000 (13:39 +0300)
committerDavid S. Miller <davem@sunset.davemloft.net>
Wed, 10 Oct 2007 23:47:58 +0000 (16:47 -0700)
This happens rather infrequently and is only possible during
FRTO. We must not allow TCP to slip to Open state because
tcp_fastretrans_alert might then not be called on it's time
when FRTO has exited. This become a problem when left_out
got removed and was replaced by just sacked_out.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_input.c

index 93823b83522b1294cb9ea88a469dd395a5c337c1..bf4fc3516fb99d92abec60ac76cf54c894ec93ef 100644 (file)
@@ -2134,7 +2134,7 @@ static void tcp_try_to_open(struct sock *sk, int flag)
        if (inet_csk(sk)->icsk_ca_state != TCP_CA_CWR) {
                int state = TCP_CA_Open;
 
-               if (tp->sacked_out || tp->retrans_out || tp->undo_marker)
+               if (tcp_left_out(tp) || tp->retrans_out || tp->undo_marker)
                        state = TCP_CA_Disorder;
 
                if (inet_csk(sk)->icsk_ca_state != state) {