Re: Slow network with 2.2.2

David Miller (davem@twiddle.net)
Tue, 2 Mar 1999 01:06:08 -0800


From: Jes Sorensen <Jes.Sorensen@cern.ch>
Date: 02 Mar 1999 09:51:51 +0100

Well you are likely to hit Solaris 2.5.1 boxes on the Internet and
if disabling window scaling solves the problem then I think I know
who to blame.

Just to clarify, the solaris tcp bug has not much to do with window
scaling :-) It has to do with retransmission of FIN's with data
attached.

Did the problem go away with the TCP patch DaveM posted the other
day? There was a workaround for another Solaris brokeness.

For convenience I've included the patch below, against 2.2.2:

--- net/ipv4/tcp_output.c.~1~ Mon Feb 22 10:17:22 1999
+++ net/ipv4/tcp_output.c Fri Feb 26 13:19:42 1999
@@ -580,6 +580,19 @@
if(tp->af_specific->rebuild_header(sk))
return 1; /* Routing failure or similar. */

+ /* Solaris sucks. */
+ if(skb->len > 0 &&
+ (TCP_SKB_CB(skb)->flags & TCPCB_FLAG_FIN) &&
+ tp->snd_una == (TCP_SKB_CB(skb)->end_seq - 1)) {
+#if 1
+ printk("TCP: Doing Solaris hack for [%p:%08x:%04x:%08x]\n",
+ skb, sk->daddr, sk->dport, tp->snd_una);
+#endif
+ TCP_SKB_CB(skb)->seq = TCP_SKB_CB(skb)->end_seq - 1;
+ skb_trim(skb, 0);
+ skb->csum = 0;
+ }
+
/* Ok, we're gonna send it out, update state. */
TCP_SKB_CB(skb)->sacked |= TCPCB_SACKED_RETRANS;
tp->retrans_out++;
@@ -592,6 +605,7 @@
skb = skb_copy(skb, GFP_ATOMIC);
else
skb = skb_clone(skb, GFP_ATOMIC);
+
tcp_transmit_skb(sk, skb);

/* Update global TCP statistics and return success. */

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/