PR/29782: Martin Husemann: procfs can not unmount when some process has its

current directory in curproc. Fix from Pedro Martelletto:
We cannot call vgone() from procfs_inactive() if we are coming from
vclean(). that's what's probably causing the deadlock.
This commit is contained in:
christos 2005-04-02 06:15:09 +00:00
parent 80216c60c5
commit 8f3566ce61

View File

@ -1,4 +1,4 @@
/* $NetBSD: procfs_vnops.c,v 1.121 2005/02/26 22:59:00 perry Exp $ */
/* $NetBSD: procfs_vnops.c,v 1.122 2005/04/02 06:15:09 christos Exp $ */
/*
* Copyright (c) 1993, 1995
@ -76,7 +76,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.121 2005/02/26 22:59:00 perry Exp $");
__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.122 2005/04/02 06:15:09 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -366,11 +366,12 @@ procfs_inactive(v)
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) == 0)
vgone(vp);
return (0);
}