In message <20031210234538.GA746_at_buffy.brucec.backnet>, Bruce Cran writes: >#10 0xc04bb923 in panic (fmt=0xc05f16d7 "getnewvnode: free vnode isn't") > at /usr/src/sys/kern/kern_shutdown.c:534 >#11 0xc0500fb5 in getnewvnode (tag=0xc05f432f "ufs", mp=0xc43f2000, vops=0x0, > vpp=0x0) at /usr/src/sys/kern/vfs_subr.c:1004 Could people seeing this panic try the following patch? I haven't thought through this in much detail, but it seems that vnodes should be removed from the free list before being cleaned. The addition of the VI_DOINGINACT test about a year ago probably made this panic more likely, but I don't know why it has suddenly cropped up recently. Jeff, does this look reasonable to you? It seems that while most callers of vclean() ensure that the vnode is not on the free list, some direct users of vgone/vgonel do not (e.g. vflush, vrecycle). This could result in a vnode being on the free list while it is being recycled. BTW, I think we may no longer need to increment the reference count in vclean(), and the comment about VOP_INACTIVE before the VOP_LOCK() call is no longer accurate. I guess it's possible that this could also affect the sysinstall crash, but that is probably unlikely. Ian Index: vfs_subr.c =================================================================== RCS file: /home/iedowse/CVS/src/sys/kern/vfs_subr.c,v retrieving revision 1.473 diff -u -r1.473 vfs_subr.c --- vfs_subr.c 30 Nov 2003 22:09:58 -0000 1.473 +++ vfs_subr.c 13 Dec 2003 16:15:44 -0000 _at__at_ -2531,6 +2531,9 _at__at_ int active; ASSERT_VI_LOCKED(vp, "vclean"); + /* The vnode must not be on the free list while being cleaned. */ + if (vp->v_iflag & VI_FREE) + vbusy(vp); /* * Check to see if the vnode is in use. If so we have to reference it * before we clean it out so that its count cannot fall to zero andReceived on Sat Dec 13 2003 - 08:00:59 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:34 UTC