Apply by doing:
cd /usr/src
patch -p0 < 003_vnode.patch
Then build and install a new kernel.
Index: sys/kern/spec_vnops.c
===================================================================
RCS file: /vol/openbsd/cvs/src/sys/kern/spec_vnops.c,v
retrieving revision 1.74
diff -u -p -r1.74 spec_vnops.c
--- sys/kern/spec_vnops.c 9 Jul 2013 15:37:43 -0000 1.74
+++ sys/kern/spec_vnops.c 8 Nov 2013 14:35:18 -0000
@@ -472,10 +472,11 @@ int
spec_close(void *v)
{
struct vop_close_args *ap = v;
+ struct proc *p = ap->a_p;
struct vnode *vp = ap->a_vp;
dev_t dev = vp->v_rdev;
int (*devclose)(dev_t, int, int, struct proc *);
- int mode, error;
+ int mode, relock, error;
switch (vp->v_type) {
@@ -541,7 +542,14 @@ spec_close(void *v)
panic("spec_close: not special");
}
- return ((*devclose)(dev, ap->a_fflag, mode, ap->a_p));
+ /* release lock if held and this isn't coming from vclean() */
+ relock = VOP_ISLOCKED(vp) && !(vp->v_flag & VXLOCK);
+ if (relock)
+ VOP_UNLOCK(vp, 0, p);
+ error = (*devclose)(dev, ap->a_fflag, mode, p);
+ if (relock)
+ vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
+ return (error);
}
int