Date: Tue, 7 Jun 2005 21:25:14 -0700 (PDT) From: Mohan Srinivasan <mohan_srinivasan@yahoo.com> To: Andrey Chernov <ache@nagual.pp.ru> Cc: raja@moselle.com, current@freebsd.org, demizu@dd.iij4u.or.jp Subject: Re: Still something wrong with tcp_sack_option () Message-ID: <20050608042514.19223.qmail@web80604.mail.yahoo.com> In-Reply-To: 6667
next in thread | raw e-mail | index | archive | help
Hi,
Noritoshi Demizu sent me a fix for this issue. Can you try
this fix ? I'll get this committed to -current shortly.
It looks like because you run with larger windows, generating
a lot of sack holes, we ran into the sackhole limits that
caused allocation of a new sackhole to fail, causing the bug.
thanks !
mohan
Index: tcp_sack.c
===================================================================
RCS file: /home/cvsup/FreeBSD/ncvs/src/sys/netinet/tcp_sack.c,v
retrieving revision 1.22
diff -u -r1.22 tcp_sack.c
--- tcp_sack.c 6 Jun 2005 19:46:53 -0000 1.22
+++ tcp_sack.c 8 Jun 2005 03:18:42 -0000
@@ -458,13 +458,19 @@
* beyond the current fack, they will be inserted by
* way of hole splitting in the while-loop below.
*/
- tcp_sackhole_insert(tp, tp->snd_fack, sblkp->start, NULL);
+ temp = tcp_sackhole_insert(tp, tp->snd_fack,sblkp->start,NULL);
+ if (temp == NULL)
+ return 0;
tp->snd_fack = sblkp->end;
/* Go to the previous sack block. */
sblkp--;
} else if (SEQ_LT(tp->snd_fack, sblkp->end))
/* fack is advanced. */
tp->snd_fack = sblkp->end;
+ /*
+ * At this point, at least one SACK hole must exist.
+ */
+ KASSERT(!TAILQ_EMPTY(&tp->snd_holes), ("SACK scoreboard is emtpy"));
cur = TAILQ_LAST(&tp->snd_holes, sackhole_head); /* Last SACK hole */
/*
* Since the incoming sack blocks are sorted, we can process them
--- Andrey Chernov <ache@nagual.pp.ru> wrote:
> On Tue, Jun 07, 2005 at 07:01:22PM -0700, Mohan Srinivasan wrote:
> > Yes. That will work around it too.
> >
>
> I forget to mention that I use relatively large send/recvspace, about
> 128K, it may increase bug trigger because SACK happens often.
>
> --
> http://ache.pp.ru/
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050608042514.19223.qmail>
