Index: fifo_vnops.c
===================================================================
RCS file: /data/ncvs/src/sys/fs/fifofs/fifo_vnops.c,v
retrieving revision 1.85
diff -u -r1.85 fifo_vnops.c
--- fifo_vnops.c	24 Mar 2003 11:03:42 -0000	1.85
+++ fifo_vnops.c	10 May 2003 14:42:59 -0000
@@ -167,6 +167,7 @@
 		struct thread *a_td;
 	} */ *ap;
 {
+	struct vop_close_args close_args;
 	struct vnode *vp = ap->a_vp;
 	struct fifoinfo *fip;
 	struct thread *td = ap->a_td;
@@ -264,7 +265,15 @@
 	}
 	return (0);
 bad:
-	VOP_CLOSE(vp, ap->a_mode, ap->a_cred, td);
+	/*
+	 * We hold the vnode lock here, so have to bypass the VOP_CLOSE()
+	 * wrapper which asserts that we won't hold the lock.
+	 */
+	close_args.a_vp = vp;
+	close_args.a_fflag = ap->a_mode;
+	close_args.a_cred = ap->a_cred;
+	close_args.a_td = td;
+	fifo_close(&close_args);
 	return (error);
 }
 
