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);
  }