Hello!

>  In brief: a stale state of the tcp send queue was observed for 2.2.17
>  while send-q counter and connection window sizes are not zero: 

I think I pinned down this. The patch is appended.


>  diagnostic, I'll try to get it. In any case, I plan to run something through
>  this connection in hope to reproduce this state again.

If my guess is right, you can easily put this socket to funny state
just catting a large file and kill -STOP'ing ssh. ssh will close window,
but sshd will not send zero probes. Any socket with keepalives enabled
enters this state after the first keepalive is sent.
[ Note, that it is not Butenko's problem, it is still to be discovered. 8) ]

I think you will not able to reproduce full problem: socket will revive
after the first received ACK. It is another bug and its probability is
astronomically low.

Alexey


--- linux/net/ipv4/tcp_input.c.orig     Mon Apr  9 22:46:56 2001
+++ linux/net/ipv4/tcp_input.c  Tue Apr 10 21:23:33 2001
@@ -733,8 +733,6 @@
        if (tp->retransmits) {
                if (tp->packets_out == 0) {
                        tp->retransmits = 0;
-                       tp->fackets_out = 0;
-                       tp->retrans_out = 0;
                        tp->backoff = 0;
                        tcp_set_rto(tp);
                } else {
@@ -781,8 +779,10 @@
        if(sk->zapped)
                return(1);      /* Dead, can't ack any more so why bother */
 
-       if (tp->pending == TIME_KEEPOPEN)
+       if (tp->pending == TIME_KEEPOPEN) {
                tp->probes_out = 0;
+               tp->pending = 0;
+       }
 
        tp->rcv_tstamp = tcp_time_stamp;
 
@@ -850,8 +850,6 @@
                if (tp->retransmits) {
                        if (tp->packets_out == 0) {
                                tp->retransmits = 0;
-                               tp->fackets_out = 0;
-                               tp->retrans_out = 0;
                        }
                } else {
                        /* We don't have a timestamp. Can only use
@@ -878,6 +876,8 @@
                        tcp_ack_packets_out(sk, tp);
        } else {
                tcp_clear_xmit_timer(sk, TIME_RETRANS);
+               tp->fackets_out = 0;
+               tp->retrans_out = 0;
        }
 
        flag &= (FLAG_DATA | FLAG_WIN_UPDATE);
--- linux/net/ipv4/tcp_output.c.orig    Mon Apr  9 22:47:06 2001
+++ linux/net/ipv4/tcp_output.c Tue Apr 10 21:23:33 2001
@@ -546,6 +546,8 @@
                 */
                kfree_skb(next_skb);
                sk->tp_pinfo.af_tcp.packets_out--;
+               if (sk->tp_pinfo.af_tcp.fackets_out)
+                       sk->tp_pinfo.af_tcp.fackets_out--;
        }
 }
 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to