We apparently have segment of zero length in queue. :-)
   
   Well, that chunk cannot be responsible for this directly, I am afraid
   we somewhat arrived to attempt to retransmit already acked segment.
Hmmm, it is one of few places where sequence numbers of already
sent packet are mangled. :-)
Good set of debug checks would be the following:
--- net/ipv4/tcp_output.c.~1~	Mon Jan 27 14:46:33 2003
+++ net/ipv4/tcp_output.c	Tue Jan 28 10:47:08 2003
@@ -441,6 +441,9 @@
 	TCP_SKB_CB(buff)->end_seq = TCP_SKB_CB(skb)->end_seq;
 	TCP_SKB_CB(skb)->end_seq = TCP_SKB_CB(buff)->seq;
 
+	BUG_TRAP(TCP_SKB_CB(buff)->seq != TCP_SKB_CB(buff)->end_seq);
+	BUG_TRAP(TCP_SKB_CB(skb)->seq != TCP_SKB_CB(skb)->end_seq);
+
 	/* PSH and FIN should only be set in the second packet. */
 	flags = TCP_SKB_CB(skb)->flags;
 	TCP_SKB_CB(skb)->flags = flags & ~(TCPCB_FLAG_FIN|TCPCB_FLAG_PSH);
@@ -524,6 +527,7 @@
 	}
 
 	TCP_SKB_CB(skb)->seq += len;
+	BUG_TRAP(TCP_SKB_CB(skb)->seq != TCP_SKB_CB(skb)->end_seq);
 	skb->ip_summed = CHECKSUM_HW;
 	return 0;
 }
@@ -796,6 +800,7 @@
 
 		/* Update sequence range on original skb. */
 		TCP_SKB_CB(skb)->end_seq = TCP_SKB_CB(next_skb)->end_seq;
+		BUG_TRAP(TCP_SKB_CB(skb)->seq != TCP_SKB_CB(skb)->end_seq);
 
 		/* Merge over control information. */
 		flags |= TCP_SKB_CB(next_skb)->flags; /* This moves PSH/FIN etc. over */
-
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/