diff -ur linux-2.2.13-ext3-clean/fs/umsdos/inode.c linux-2.2.13-my/fs/umsdos/inode.c
--- linux-2.2.13-ext3-clean/fs/umsdos/inode.c	Sat Dec 18 09:13:51 1999
+++ linux-2.2.13-my/fs/umsdos/inode.c	Sat Dec 18 08:41:32 1999
@@ -168,7 +168,14 @@
 	} else if (S_ISBLK (inode->i_mode)) {
 		inode->i_op = &blkdev_inode_operations;
 	} else if (S_ISFIFO (inode->i_mode)) {
-		init_fifo (inode);
+	/* if someone is using FIFO, we must not reinitialize it, because
+	   we will destroy its locks, and sleep_on in fifo_open() will
+	   hardlock/oops our kernel! this started happening with
+	   patch-2.2.7. Why did it not happen before ? Maybe we were
+	   never called with i_count > 1 ?
+	*/
+		if (inode->i_count < 2)	
+			init_fifo (inode);
 	}
 }
 
