Re: PANIC: sent too much

From: Andre Oppermann <andre_at_freebsd.org>
Date: Tue, 20 Jan 2004 19:54:10 +0100
> On Tue, Jan 20, 2004 at 01:42:33PM +0100, Jiri Mikulas wrote:
>> hello
>> sometimes i got this panic
>> with high load on network interfaces
>> 
>>  Panicstring: sent too much
> 
> I've seen that panicstring with a Jan 12 kernel on my fxp using athlon
> system.  I didn't have crashdumps setup but I took digital pictures I
> can trascribe if necessary.
> 
> I don't think mine was associated too much with high network activity,
> but I didn't check too close.  It didn't stay up for more than 12 hours
> at a time and the shortest uptime was probably 10 minutes.  It's all new 
> hardware so I was suspecting hardware for a while.
> 
> I think I'm running a Jan 14 or 15 kernel now with no panics (so I no
> longer suspect the hardware).  I can check the exact cvsup date when I
> get to work.  Wish I had Wi-Fi on the MTA North.

Could you please try the attached patch.  This is a fix by Jeffrey Hsu
taken from DFBSD.  The problem is insufficient updating of some internal
tcp variables.  This comes into play when there is packet loss on a
connection which is quite common on wireless links. ;)

-- 
Andre

Index: tcp_input.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/tcp_input.c,v
retrieving revision 1.219
diff -u -p -r1.219 tcp_input.c
--- tcp_input.c	8 Jan 2004 17:40:06 -0000	1.219
+++ tcp_input.c	20 Jan 2004 18:46:51 -0000
_at__at_ -1859,13 +1859,12 _at__at_ trimthenstep6:
  					KASSERT(tp->t_dupacks == 1 ||
  					    tp->t_dupacks == 2,
  					    ("dupacks not 1 or 2"));
-					if (tp->t_dupacks == 1) {
+					if (tp->t_dupacks == 1)
  						tp->snd_limited = 0;
-						tp->snd_cwnd += tp->t_maxseg;
-					} else {
-						tp->snd_cwnd +=
-						    tp->t_maxseg * 2;
-					}
+					tp->snd_cwnd =
+					    (tp->snd_nxt - tp->snd_una) +
+					    (tp->t_dupacks - tp->snd_limited) *
+					    tp->t_maxseg;
  					(void) tcp_output(tp);
  					sent = tp->snd_max - oldsndmax;
  					if (sent > tp->t_maxseg) {
Received on Tue Jan 20 2004 - 09:54:13 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:39 UTC