Messages in this thread Patch in this message | | | Date | Sat, 8 May 1999 22:33:43 -0700 | From | "David S. Miller" <> | Subject | Re: Linux 2.2.7-ac2: Path MTU bug still there .. |
| |
Please try this patch, it should be cured now:
--- vanilla/linux/net/ipv4/tcp_output.c Wed Apr 28 09:51:57 1999 +++ linux/net/ipv4/tcp_output.c Sat May 8 22:29:05 1999 @@ -5,7 +5,7 @@ * * Implementation of the Transmission Control Protocol(TCP). * - * Version: $Id: tcp_output.c,v 1.107 1999/04/28 16:08:12 davem Exp $ + * Version: $Id: tcp_output.c,v 1.108 1999/05/08 21:48:59 davem Exp $ * * Authors: Ross Biro, <bir7@leland.Stanford.Edu> * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> @@ -521,24 +521,39 @@ void tcp_simple_retransmit(struct sock *sk) { struct tcp_opt *tp = &(sk->tp_pinfo.af_tcp); - struct sk_buff *skb; - unsigned int mss = tcp_current_mss(sk); + struct sk_buff *skb, *old_next_skb; + unsigned int mss = tcp_current_mss(sk); /* Don't muck with the congestion window here. */ tp->dup_acks = 0; tp->high_seq = tp->snd_nxt; - tp->retrans_head = NULL; + tp->retrans_head = NULL; /* Input control flow will see that this was retransmitted * and not use it for RTT calculation in the absence of * the timestamp option. */ - for (skb = skb_peek(&sk->write_queue); + for (old_next_skb = skb = skb_peek(&sk->write_queue); ((skb != tp->send_head) && (skb != (struct sk_buff *)&sk->write_queue)); - skb = skb->next) - if (skb->len > mss) - tcp_retransmit_skb(sk, skb); + skb = skb->next) { + int resend_skb = 0; + + /* Our goal is to push out the packets which we + * sent already, but are being chopped up now to + * account for the PMTU information we have. + * + * As we resend the queue, packets are fragmented + * into two pieces, and when we try to send the + * second piece it may be collapsed together with + * a subsequent packet, and so on. -DaveM + */ + if (old_next_skb != skb || skb->len > mss) + resend_skb = 1; + old_next_skb = skb->next; + if (resend_skb != 0) + tcp_retransmit_skb(sk, skb); + } } static __inline__ void update_retrans_head(struct sock *sk) - 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/
| |