Re: 1.3.88 ftp problems - it hangs

Eric Schenk (schenk@cs.toronto.edu)
Sun, 14 Apr 1996 17:27:43 -0400


Bob Felderman <feldy@myri.com> writes:
>Ftp transfers between linux-1.3.88 machines with a large-ish MTU (3584)
>do not work. The transfer hangs. Eventually I have to suspend and
>kill the ftp process on the sender side. The tcpdump logs
>are attached in a uuencoded, gzipped tarfile
>In that directory "ftp_send" "ftp_recv" are the tcpdumps. The ".config" for
>each machine is send.config and recv.config.

Please try the attached patch. This corrects two minor bugs, one
oversight in the changes to the new delayed ACK timer, and
the other in the fast retransmit code.
The bug in the retransmit code might have caused the problem you
are seeing.

diff -u -r linux-1.3.88/net/ipv4/tcp_input.c linux/net/ipv4/tcp_input.c
--- linux-1.3.88/net/ipv4/tcp_input.c Sun Apr 14 02:51:54 1996
+++ linux/net/ipv4/tcp_input.c Sun Apr 14 17:21:54 1996
@@ -705,10 +705,11 @@
* right hand window edge of the host.
* We do a bit of work here to track number of times we've
* seen this ack without a change in the right edge of the
- * window. This will allow us to do fast retransmits.
+ * window and no data in the packet.
+ * This will allow us to do fast retransmits.
*/

- if (sk->rcv_ack_seq == ack && sk->window_seq == window_seq)
+ if (sk->rcv_ack_seq == ack && sk->window_seq == window_seq && !(flag&1))
{
/*
* We only want to short cut this once, many
@@ -1318,8 +1319,7 @@
if(sk->debug)
printk("Ack past end of seq packet.\n");
tcp_send_ack(sk);
- sk->ack_backlog++;
- tcp_reset_xmit_timer(sk, TIME_WRITE, min(sk->ato, HZ/2));
+ tcp_send_delayed_ack(sk,HZ/2);
}
}
}

-- eric

---------------------------------------------------------------------------
Eric Schenk www: http://www.cs.toronto.edu/~schenk
Department of Computer Science email: schenk@cs.toronto.edu
University of Toronto