diff -ur linux-2.2.13_ext3_my_umsdos_copy_000105/fs/umsdos/README-WIP.txt linux/fs/umsdos/README-WIP.txt
--- linux-2.2.13_ext3_my_umsdos_copy_000105/fs/umsdos/README-WIP.txt	Mon Jan 10 04:34:38 2000
+++ linux/fs/umsdos/README-WIP.txt	Mon Jan 10 04:31:38 2000
@@ -18,7 +18,7 @@
 Legend: those lines marked with '+' on the beggining of line indicates it
 passed all of my tests, and performed perfect in all of them.
 
-Current status (990202) - UMSDOS 0.85:
+Current status (000109) - UMSDOS 0.85c:
 
 (1) pure MSDOS (no --linux-.--- EMD file):
 
@@ -60,7 +60,7 @@
 
 WRITE:
 + create symlink		- works
-- create hardlink		- works
+- create hardlink		- works for same DIR (see notes)
 + create file			- works
 + create special file		- works
 + write to file			- works
@@ -74,7 +74,7 @@
 + rename dir (dif. dir)		- works
 + delete file			- works
 + notify_change (chown,perms)	- works
-+ delete hardlink		- works
+- delete hardlink		- works for same DIR (see notes)
 + mkdir				- works
 + rmdir 			- works
 + umssyncing (many ioctls)	- works
diff -ur linux-2.2.13_ext3_my_umsdos_copy_000105/fs/umsdos/check.c linux/fs/umsdos/check.c
--- linux-2.2.13_ext3_my_umsdos_copy_000105/fs/umsdos/check.c	Mon Jan 10 04:34:12 2000
+++ linux/fs/umsdos/check.c	Mon Jan 10 03:00:35 2000
@@ -81,11 +81,11 @@
 void check_inode (struct inode *inode)
 {
 	if (inode) {
-		printk (KERN_DEBUG "*   inode is %lu (i_count=%d)",
-			 inode->i_ino, inode->i_count);
+		printk (KERN_DEBUG "*   inode is %lu (i_count=%d, pos=%lu)",
+			 inode->i_ino, inode->i_count, inode->u.umsdos_i.pos);
 		check_sb (inode->i_sb, 'i');
 		
-		if (inode->i_dentry.next) {	/* FIXME: does this work ? */
+		if (!list_empty(&inode->i_dentry)) {
 			printk (" (has i_dentry)");
 		} else {
 			printk (" (NO i_dentry)");
diff -ur linux-2.2.13_ext3_my_umsdos_copy_000105/fs/umsdos/dir.c linux/fs/umsdos/dir.c
--- linux-2.2.13_ext3_my_umsdos_copy_000105/fs/umsdos/dir.c	Mon Jan 10 04:34:12 2000
+++ linux/fs/umsdos/dir.c	Mon Jan 10 04:35:47 2000
@@ -718,6 +722,7 @@
 	filp.f_flags = O_RDONLY;
 
 	len = umsdos_file_read_kmem (&filp, path, hlink->d_inode->i_size);
+	if ((len > 0) && (len < PATH_MAX)) path[len] = '\0';
 	if (len != hlink->d_inode->i_size)
 		goto out_noread;
 #ifdef UMSDOS_DEBUG_VERBOSE
diff -ur linux-2.2.13_ext3_my_umsdos_copy_000105/fs/umsdos/inode.c linux/fs/umsdos/inode.c
--- linux-2.2.13_ext3_my_umsdos_copy_000105/fs/umsdos/inode.c	Mon Jan 10 04:34:38 2000
+++ linux/fs/umsdos/inode.c	Mon Jan 10 04:35:57 2000
@@ -356,7 +356,7 @@
 	if (!res)
 		goto out_fail;
 
-	printk (KERN_INFO "UMSDOS 0.85b "
+	printk (KERN_INFO "UMSDOS 0.85c "
 		"(compatibility level %d.%d, fast msdos)\n", 
 		UMSDOS_VERSION, UMSDOS_RELEASE);
 
diff -ur linux-2.2.13_ext3_my_umsdos_copy_000105/fs/umsdos/rdir.c linux/fs/umsdos/rdir.c
--- linux-2.2.13_ext3_my_umsdos_copy_000105/fs/umsdos/rdir.c	Mon Jan 10 04:34:12 2000
+++ linux/fs/umsdos/rdir.c	Mon Jan 10 04:16:28 2000
@@ -110,7 +110,10 @@
 		 */
 Printk ((KERN_DEBUG "umsdos_rlookup_x: patch_dentry_inode %s/%s\n",
 dentry->d_parent->d_name.name, dentry->d_name.name));
-		umsdos_patch_dentry_inode(dentry, 0);
+/* only patch if needed (because we get called even for lookup and rlookup stuff
+   sometimes, like in umsdos_covered() */
+		if (dentry->d_inode->u.umsdos_i.i_patched == 0)	
+			umsdos_patch_dentry_inode(dentry, 0);
 
 	}
 out:

