Date: Tue, 17 Apr 2001 07:19:30 +1000 From: Peter Jeremy <peter.jeremy@alcatel.com.au> To: John Baldwin <jhb@FreeBSD.ORG> Cc: freebsd-current@FreeBSD.ORG Subject: Re: WITNESS + WITNESS_SKIPSPIN = panic Message-ID: <20010417071929.C66243@gsmx07.alcatel.com.au> In-Reply-To: <XFMail.010414185428.jhb@FreeBSD.org>; from jhb@FreeBSD.ORG on Sat, Apr 14, 2001 at 06:54:28PM -0700 References: <20010415093916.A39554@gsmx07.alcatel.com.au> <XFMail.010414185428.jhb@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 2001-Apr-14 18:54:28 -0700, John Baldwin <jhb@FreeBSD.ORG> wrote: > >On 14-Apr-01 Peter Jeremy wrote: >> Is there any progress on fixing this? >> >> Peter > >It panics? I'll see if I can reproduce this on Monday. I never use skipspin. A similar problem was reported here in mid-March, ending with the following message: On Mon, 12 Mar 2001 10:49:51 -0800 (PST), in <XFMail.010312104951.jhb@FreeBSD.org>, John Baldwin <jhb@FreeBSD.org> wrote: >Just don't use the skipspin stuff, it shouldn't hurt at all. The new witness >code will hopefully be in by the end of the week. *crosses fingers* I bumped into the same problem last week and couldn't find anything that looked like a change in the skipspin behaviour since mid-March. Having looked in more detail at the previous thread, I suspect I may be seeing something different. In my case, the kernel is panicing very early during the boot process in either line 302 or 305 of /sys/kern/subr_witness.c in witness_initialize(): 299 /* First add in all the specified order lists. */ 300 for (order = order_lists; order->w_name != NULL; order++) { 301 w = enroll(order->w_name, order->w_class); 302 w->w_file = "order list"; 303 for (order++; order->w_name != NULL; order++) { 304 w1 = enroll(order->w_name, order->w_class); 305 w1->w_file = "order list"; 306 itismychild(w, w1); 307 w = w1; 308 } 309 } The problem is that enroll() will return NULL for spinlocks when witness_skipspin is set, but the above code always assumes it can de-reference the result from enroll(). (There are two other calls to enroll() where a NULL return appears to be acceptable). I don't understand the mutex initialisation well enough to be able to readily work out the correct fix. Peter To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010417071929.C66243>