Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 Dec 2011 09:52:44 -0500
From:      John Baldwin <jhb@freebsd.org>
To:        Pawel Jakub Dawidek <pjd@freebsd.org>
Cc:        Kostik Belousov <kostikbel@gmail.com>, Lawrence Stewart <lstewart@freebsd.org>, freebsd-current@freebsd.org, Andre Oppermann <andre@freebsd.org>, freebsd-net@freebsd.org
Subject:   Re: 9.0-RC1 panic in tcp_input: negative winow.
Message-ID:  <201112200952.44690.jhb@freebsd.org>
In-Reply-To: <20111217232125.GA1685@garage.freebsd.pl>
References:  <20111022084931.GD1697@garage.freebsd.pl> <201112121100.23567.jhb@freebsd.org> <20111217232125.GA1685@garage.freebsd.pl>

next in thread | previous in thread | raw e-mail | index | archive | help
On Saturday, December 17, 2011 6:21:27 pm Pawel Jakub Dawidek wrote:
> On Mon, Dec 12, 2011 at 11:00:23AM -0500, John Baldwin wrote:
> > An update.  I've sent Pawel a testing patch to see if my hypothesis is correct
> > (www.freebsd.org/~jhb/patches/tcp_negwin_test.patch).  If it is then I intend
> > to commit www.freebsd.org/~jhb/patches/tcp_negwin2.patch as the fix.
> 
> Unfortunately it paniced today. Take a look at:
> 
> 	http://people.freebsd.org/~pjd/misc/tcp_panic.jpg

Ok, the one use case I was worried about is happening regularly before your
panic, so that is good.  Can you use gdb to figure out which call to
tcp_output() is actually panic'ing?  I wonder if it is this case:

	/*
	 * Return any desired output.
	 */
	if (needoutput || (tp->t_flags & TF_ACKNOW)) {
		(void) tcp_output(tp);
		/* XXX: Debug */
		KASSERT(SEQ_GEQ(tp->rcv_adv, tp->rcv_nxt),
		    ("tcp_input: negative window after ACK"));

And if 'needoutput' is true, but TF_ACKNOW is not set, and tcp_output() decides
to not do anything.  I've updated tcp_negwin_test.patch to not panic if that call
to tcp_output() doesn't actually send a packet.  Please re-test.

-- 
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201112200952.44690.jhb>