From owner-freebsd-bugs@FreeBSD.ORG Tue Aug 3 03:30:32 2004 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 92EEE16A4CE for ; Tue, 3 Aug 2004 03:30:32 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 8455843D2D for ; Tue, 3 Aug 2004 03:30:32 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.11/8.12.11) with ESMTP id i733UWw5042241 for ; Tue, 3 Aug 2004 03:30:32 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.11/8.12.11/Submit) id i733UWnd042240; Tue, 3 Aug 2004 03:30:32 GMT (envelope-from gnats) Date: Tue, 3 Aug 2004 03:30:32 GMT Message-Id: <200408030330.i733UWnd042240@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Brian Buchanan Subject: Re: kern/59945: nullfs bug: reboot after panic: null_checkvp [4.9] X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Brian Buchanan List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Aug 2004 03:30:32 -0000 The following reply was made to PR kern/59945; it has been noted by GNATS. From: Brian Buchanan To: freebsd-gnats-submit@freebsd.org Cc: Subject: Re: kern/59945: nullfs bug: reboot after panic: null_checkvp [4.9] Date: Mon, 2 Aug 2004 20:21:22 -0700 (PDT) This is almost certainly still an issue in 4.10, however, it will not occur unless DIAGNOSTIC is defined. getnewvnode() attempts a VOP_GETVOBJECT() on a nullfs vnode. null_getvobject() uses the NULLVPTOLOWERVP() macro to get the lower vnode so that its vm_object can be returned. However, for a free nullfs vnode, there is no lower vnode. null_checkvp() will be invoked as a result of the macro, and it will panic when it finds that lowervp is not set. #ifdef DIAGNOSTIC struct vnode *null_checkvp(struct vnode *vp, char *fil, int lno); #define NULLVPTOLOWERVP(vp) null_checkvp((vp), __FILE__, __LINE__) #else #define NULLVPTOLOWERVP(vp) (VTONULL(vp)->null_lowervp) #endif null_getvobject() needs to test whether the vnode is still alive before it tries to descend into its data structures. Or, alternately, the patch tjr was working on will fix this by delaying the cleanup of the null vode and its associated data structures until the reclaim operation.