Do an explicit VOP_UNLOCK in ufs_vinit before setting v_op to

spec_vnode_ops_p. Workaround for a lock leak. Problem tracked
down by der Mouse.
This commit is contained in:
fvdl 2001-03-23 12:15:34 +00:00
parent d2f3ad2de2
commit 509b0d01a5

View File

@ -1,4 +1,4 @@
/* $NetBSD: ufs_vnops.c,v 1.76 2001/02/26 18:09:20 lukem Exp $ */
/* $NetBSD: ufs_vnops.c,v 1.77 2001/03/23 12:15:34 fvdl Exp $ */
/*
* Copyright (c) 1982, 1986, 1989, 1993, 1995
@ -1929,8 +1929,10 @@ ufs_vinit(struct mount *mntp, int (**specops)(void *), int (**fifoops)(void *),
*/
nvp->v_data = vp->v_data;
vp->v_data = NULL;
/* XXX spec_vnodeops has no locking, do it explicitly */
VOP_UNLOCK(vp, 0);
vp->v_op = spec_vnodeop_p;
vput(vp);
vrele(vp);
vgone(vp);
lockmgr(&nvp->v_lock, LK_EXCLUSIVE, &nvp->v_interlock);
/*