Skip site navigation (1)Skip section navigation (2)
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>