Subject: Re: kern/29782
To: None <kern-bug-people@netbsd.org, gnats-admin@netbsd.org,>
From: Pedro Martelletto <pedro@ambientworks.net>
List: netbsd-bugs
Date: 04/01/2005 21:01:03
The following reply was made to PR kern/29782; it has been noted by GNATS.
From: Pedro Martelletto <pedro@ambientworks.net>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: kern/29782
Date: Fri, 1 Apr 2005 17:59:59 -0300
we cannot call vgone() from procfs_inactive() if we are coming from
vclean(). that's what's probably causing the deadlock.
-p.
Index: procfs_vnops.c
===================================================================
RCS file: /cvsroot/src/sys/miscfs/procfs/procfs_vnops.c,v
retrieving revision 1.121
diff -u -r1.121 procfs_vnops.c
--- procfs_vnops.c 26 Feb 2005 22:59:00 -0000 1.121
+++ procfs_vnops.c 1 Apr 2005 20:24:36 -0000
@@ -366,11 +366,12 @@
struct vnode *a_vp;
struct proc *a_p;
} */ *ap = v;
- struct pfsnode *pfs = VTOPFS(ap->a_vp);
+ struct vnode *vp = ap->a_vp;
+ struct pfsnode *pfs = VTOPFS(vp);
- VOP_UNLOCK(ap->a_vp, 0);
- if (PFIND(pfs->pfs_pid) == NULL)
- vgone(ap->a_vp);
+ VOP_UNLOCK(vp, 0);
+ if (PFIND(pfs->pfs_pid) == NULL && !(vp->v_flag & VXLOCK))
+ vgone(vp);
return (0);
}