Subject: Re: kern/36572: panic on NFS unmount
To: None <gnats-bugs@NetBSD.org>
From: YAMAMOTO Takashi <yamt@mwd.biglobe.ne.jp>
List: netbsd-bugs
Date: 06/28/2007 20:38:40
> When rebooting a diskless machine after quite some NFS usage I hit this panic:
> 
> panic: nfs_inactive: vp=0xd6dd9e0 error=0
> 
> nfs_inactive() + 0x13c
> VOP_INACTIVE()
> vclean()
> vgonel()
> vflush()
> nfs_unmount()
> dounmount()
> vfs_unmountall()
> 
> It has a big XXX comment:
> 
> 0x1047d5c is in nfs_inactive (../../../../nfs/nfs_node.c:272).
> 267                      */
> 268     
> 269                     error = vn_lock(sp->s_dvp, LK_EXCLUSIVE | LK_CANRECURSE);
> 270                     if (error || sp->s_dvp->v_data == NULL) {
> 271                             /* XXX should recover */
> 272                             panic("%s: vp=%p error=%d", __func__, sp->s_dvp, error);
> 273                     }
> 274                     nfs_removeit(sp);
> 275                     kauth_cred_free(sp->s_cred);
> 276                     vput(sp->s_dvp);
> 
> What is this test for? Is it to protect vput()? But nfs_unlock() already deals
> with v_data == 0. Or has this vnode been reclaimed already (how could I tell
> from ddb?)

sh vnode 0xd6dd9e0

if dvp have been revoked (v_data == NULL), nfs_removeit() doesn't work.
probably it isn't critical enough to panic, but it should be fixed eventually.

> Might this be related to PR kern/36424 (wishfull thinking).

i guess it's unrelated.

YAMAMOTO Takashi