Re: TCP related panic in -CURRENT

看板DFBSD_bugs作者時間21年前 (2005/03/15 04:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
This is a multi-part message in MIME format. --------------050009000702090003080102 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Please try this patch. Thanks. --------------050009000702090003080102 Content-Type: text/plain; name="lt.diff2" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="lt.diff2" Index: tcp_input.c =================================================================== RCS file: /j/dragonfly/dcvs/src/sys/netinet/tcp_input.c,v retrieving revision 1.54 diff -u -p -r1.54 tcp_input.c --- tcp_input.c 9 Mar 2005 06:57:29 -0000 1.54 +++ tcp_input.c 13 Mar 2005 06:10:53 -0000 @@ -1954,6 +1954,7 @@ fastretransmit: (tp->t_dupacks - tp->snd_limited); } else if (tcp_do_limitedtransmit) { u_long oldcwnd = tp->snd_cwnd; + u_long oldssthresh = tp->snd_ssthresh; tcp_seq oldsndmax = tp->snd_max; /* outstanding data */ uint32_t ownd = tp->snd_max - tp->snd_una; @@ -1969,8 +1970,10 @@ fastretransmit: tp->snd_cwnd = ownd + (tp->t_dupacks - tp->snd_limited) * tp->t_maxseg; + tp->snd_ssthresh = tp->snd_cwnd; tcp_output(tp); tp->snd_cwnd = oldcwnd; + tp->snd_ssthresh = oldssthresh; sent = tp->snd_max - oldsndmax; if (sent > tp->t_maxseg) { KASSERT((tp->t_dupacks == 2 && Index: tcp_output.c =================================================================== RCS file: /j/dragonfly/dcvs/src/sys/netinet/tcp_output.c,v retrieving revision 1.25 diff -u -p -r1.25 tcp_output.c --- tcp_output.c 9 Mar 2005 06:54:34 -0000 1.25 +++ tcp_output.c 12 Mar 2005 22:23:00 -0000 @@ -193,13 +193,13 @@ tcp_output(tp) else tp->t_flags &= ~TF_LASTIDLE; - if (TCP_DO_SACK(tp) && tp->snd_nxt != tp->snd_max && + if (TCP_DO_SACK(tp) && (tp->snd_cwnd < tp->snd_ssthresh) && !IN_FASTRECOVERY(tp)) nsacked = tcp_sack_bytes_below(&tp->scb, tp->snd_nxt); again: /* Make use of SACK information when slow-starting after a RTO. */ - if (TCP_DO_SACK(tp) && tp->snd_nxt != tp->snd_max && + if (TCP_DO_SACK(tp) && (tp->snd_cwnd < tp->snd_ssthresh) && !IN_FASTRECOVERY(tp)) { tcp_seq old_snd_nxt = tp->snd_nxt; --------------050009000702090003080102--
文章代碼(AID): #12DUs600 (DFBSD_bugs)
文章代碼(AID): #12DUs600 (DFBSD_bugs)