Date: Thu, 14 Nov 1996 08:37:29 -0500 (EST) From: Thomas David Rivers <ponds!rivers@dg-rtp.dg.com> To: ponds!freefall.cdrom.com!freebsd-hackers Subject: daily panics - the saga continues... Message-ID: <199611141337.IAA19687@lakes.water.net>
next in thread | raw e-mail | index | archive | help
Well, on some very good advice; I added a printf()
to getnewvnode() in vfs_subr.c - to ensure that my
good fortune with 5+ days of uptime was actually
do to the check of vp->v_usecount.
My code in vfs_subr.c now looks like (it's ugly, but I put
everything in the left column so I can easily delete it..):
if (freevnodes < (numvnodes >> 2) ||
numvnodes < desiredvnodes ||
vp == NULL || /* list empty */
vp->v_usecount) /* queue wrapped */
{
{
if(!(freevnodes < (numvnodes >>2)) &&
!(numvnodes < desiredvnodes) &&
!(vp == NULL) &&
vp->v_usecount)
printf("getnewvnode: Allocating new vnode because queue wrapped\n");
}
vp = (struct vnode *) malloc((u_long) sizeof *vp,
M_VNODE, M_WAITOK);
bzero((char *) vp, sizeof *vp);
numvnodes++;
} else {
TAILQ_REMOVE(&vnode_free_list, vp, v_freelist);
freevnodes--;
I installed that kernel and rebooted...
Guess what! At my typical ~3:20 am time, I got a panic, but a
different one this time (this is getting stranger and stranger):
[The panic does indicate there is a problem in the panic() routine,
as the %d should have been replaced with the int... if you check
ufs_ihash.c, you'll find this particular panic() call...]
Script started on Thu Nov 14 08:25:26 1996
ponds# gdb -k kernel.8 vmcore.8
GDB is free software and you are welcome to distribute copies of it
under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.13 (i386-unknown-freebsd),
Copyright 1994 Free Software Foundation, Inc...(no debugging symbols found)...
IdlePTD 1e4000
current pcb at 1d5484
panic: ufs_ihashget: recursive lock not expected -- pid %d
#0 0xf0193ceb in boot ()
(kgdb) where
#0 0xf0193ceb in boot ()
#1 0xf0112b83 in panic ()
#2 0xf017bfc1 in ufs_ihashget ()
#3 0xf017a193 in ffs_vget ()
#4 0xf017517a in ffs_valloc ()
#5 0xf0181436 in ufs_makeinode ()
#6 0xf017edf5 in ufs_create ()
#7 0xf012cc07 in vn_open ()
#8 0xf012a43f in open ()
#9 0xf019c066 in syscall ()
#10 0xf019152b in Xsyscall ()
#11 0x33c0 in ?? ()
#12 0x32cd in ?? ()
#13 0x327d in ?? ()
#14 0x31d7 in ?? ()
#15 0x2f7b in ?? ()
#16 0x2e76 in ?? ()
#17 0x3b87 in ?? ()
#18 0x4854 in ?? ()
#19 0x474e in ?? ()
#20 0x467a in ?? ()
#21 0x1ffe in ?? ()
#22 0x1e6b in ?? ()
#23 0x1d21 in ?? ()
#24 0x16a7 in ?? ()
#25 0x10d3 in ?? ()
(kgdb)
ponds#
Script done on Thu Nov 14 08:26:31 1996
There were no instances of the text from my added printf() in
/var/log/messages - so I can only assume this didn't participate
in the good fortune I was previously experiencing...
I'm *really* stumped now... First, why was I sucessfully running
for so long - just luck? Second, one change to the source causes a
new/different (although, seemingly related to inode allocation...)
panic.
I can connect this machine to the internet and provide accounts
for anyone who would like to "take a whack" at this problem...
As always, I'm open to suggestions/ideas... [I need to order that 4.4BSD
book :-) ]
- Dave Rivers -
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199611141337.IAA19687>
