tcp_sack related panic
Matthew Dillon
dillon at apollo.backplane.com
Sat Feb 2 17:43:36 PST 2008
:#6 0xc02fe396 in calltrap () at /usr/src/sys/platform/pc32/i386/exception.=
:s:783
:#7 0xc0233d36 in sack_block_lookup (scb=3D0xdace6b0c, seq=3D1554912228, sb=
:=3D0xdaa45a90) at /usr/src/sys/netinet/tcp_sack.c:128
:#8 0xc0233eda in tcp_sack_nextseg (tp=3D0xdace6a20, nextrexmt=3D0xdaa45ad0=
:, plen=3D0xdaa45ad4, lostdup=3D0xdaa45acc) at /usr/src/sys/netinet/tcp_sack=
:=2Ec:496
:#9 0xc022f603 in tcp_sack_rexmt (tp=3D0xdace6a20, th=3D<value optimized ou=
Hmm. I see two places where a node is removed from the sackblocks list
but lastfound is not cleared on match. I don't know if this is the
issue but it's the most obvious from looking at the failure.
I'll commit this tomorrow if no new developments come up.
-Matt
Matthew Dillon
<dillon at backplane.com>
Index: tcp_sack.c
===================================================================
RCS file: /cvs/src/sys/netinet/tcp_sack.c,v
retrieving revision 1.6
diff -u -p -r1.6 tcp_sack.c
--- tcp_sack.c 22 Apr 2007 01:13:14 -0000 1.6
+++ tcp_sack.c 3 Feb 2008 01:32:16 -0000
@@ -176,7 +176,7 @@
sb = TAILQ_FIRST(&scb->sackblocks);
while (sb && SEQ_LEQ(sb->sblk_end, th_ack)) {
nb = TAILQ_NEXT(sb, sblk_list);
- if (sb == scb->lastfound)
+ if (scb->lastfound == sb)
scb->lastfound = NULL;
TAILQ_REMOVE(&scb->sackblocks, sb, sblk_list);
free_sackblock(sb);
@@ -334,6 +334,8 @@ SEQ_GEQ(workingblock->sblk_end, sb-
struct sackblock *nextblock;
nextblock = TAILQ_NEXT(sb, sblk_list);
+ if (scb->lastfound == sb)
+ scb->lastfound = NULL;
/* Remove completely overlapped block */
TAILQ_REMOVE(&scb->sackblocks, sb, sblk_list);
free_sackblock(sb);
@@ -346,6 +348,8 @@ if (sb != NULL &&
SEQ_GEQ(workingblock->sblk_end, sb->sblk_start)) {
/* Extend new block to cover partially overlapped old block. */
workingblock->sblk_end = sb->sblk_end;
+ if (scb->lastfound == sb)
+ scb->lastfound = NULL;
TAILQ_REMOVE(&scb->sackblocks, sb, sblk_list);
free_sackblock(sb);
--scb->nblocks;
More information about the Bugs
mailing list