lkml.org 
[lkml]   [2001]   [Apr]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectRe: Bug report: tcp staled when send-q != 0, timers == 0.
    Date
    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 majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-03-22 13:25    [W:5.874 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site