On Saturday, May 14, 2011 1:07:18 pm Mikolaj Golub wrote: > > On Sat, 14 May 2011 10:37:51 -0400 John Baldwin wrote: > > JB> Can you capture a tcpdump (probably easiest to do from the other host)? > > I replaced the asserts with log statements to make the host not panic and the > captured dump survive.
Please try this change. What is happening is that you have a remaining window that is smaller than the window scale. You are receiving zero window updates that are received ok (becuase the socket buffer isn't completely empty), and that advance rcv_nxt. However, tcp_output() is not advancing rcv_adv because 'recwin' is calculated as zero. My invariants had assumed that the ACK that gets forced out for a reply to a zero window probe would move rcv_adv, but that isn't happening. This patch will allow rcv_adv to advance when a zero window probe is ACK'd. I'm not sure if this is the best way to fix this, but I think it will fix it: Index: tcp_output.c =================================================================== --- tcp_output.c (revision 222565) +++ tcp_output.c (working copy) @@ -1331,7 +1331,7 @@ out: * then remember the size of the advertised window. * Any pending ACK has now been sent. */ - if (recwin > 0 && SEQ_GT(tp->rcv_nxt + recwin, tp->rcv_adv)) + if (recwin >= 0 && SEQ_GT(tp->rcv_nxt + recwin, tp->rcv_adv)) tp->rcv_adv = tp->rcv_nxt + recwin; tp->last_ack_sent = tp->rcv_nxt; tp->t_flags &= ~(TF_ACKNOW | TF_DELACK); -- John Baldwin _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"