Subject: kern/36572: panic on NFS unmount
To: None <kern-bug-people@netbsd.org, gnats-admin@netbsd.org,>
From: None <martin@aprisoft.de>
List: netbsd-bugs
Date: 06/28/2007 08:40:00
>Number:         36572
>Category:       kern
>Synopsis:       panic on NFS unmount
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Jun 28 08:40:00 +0000 2007
>Originator:     Martin Husemann
>Release:        NetBSD 4.99.21
>Organization:
>Environment:
System: NetBSD nelly.aprisoft.de 4.99.21 NetBSD 4.99.21 (NELLY) #5: Wed Jun 27 05:09:38 CEST 2007 martin@emmas.aprisoft.de:/nelly/usr/src/sys/arch/sparc64/compile/NELLY sparc64
Architecture: sparc64
Machine: sparc64
>Description:

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?)

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

>How-To-Repeat:

I used the / on NFS for a day (including a build.sh run) and then rebooted.

>Fix:
no idea, sorry.