[2494] in linux-net channel archive

home help back first fref pref prev next nref lref last post

Re: 1.3.88 ftp problems - it hangs

daemon@ATHENA.MIT.EDU (Eric Schenk)
Sun Apr 14 20:52:33 1996

To: feldy@myri.com (Bob Felderman)
cc: alan@cymru.net, roque@di.fc.ul.pt, torvalds@cs.helsinki.fi,
        linux-kernel@vger.rutgers.edu, linux-net@vger.rutgers.edu
In-reply-to: Your message of "Sun, 14 Apr 1996 00:50:13 EDT."
             <9604140450.AA00934@myri.com> 
Date: 	Sun, 14 Apr 1996 17:27:43 -0400
From: "Eric Schenk" <schenk@cs.toronto.edu>


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


home help back first fref pref prev next nref lref last post