There is a bug in unionfs_interpose() in main.c.
When the target entry is hard-linked, the unionfs inode will be broken.

Junjiro Okajima

--- unionfs-20060221-0341/main.c        23 Feb 2006 00:47:37 -0000      1.1
+++ unionfs-20060221-0341/main.c        27 Feb 2006 21:05:38 -0000      1.2
@@ -81,6 +81,7 @@ int unionfs_interpose(struct dentry *den
                        err = -ENOMEM;
                        goto out;
                }
+               mutex_lock(&inode->i_mutex);
        } else {
                ino_t ino;
                /* get unique inode number for unionfs */
@@ -101,11 +102,11 @@ int unionfs_interpose(struct dentry *den
                        err = -EACCES;  /* should be impossible??? */
                        goto out;
                }
-       }
 
-       mutex_lock(&inode->i_mutex);
-       if (atomic_read(&inode->i_count) > 1)
-               goto skip;
+               mutex_lock(&inode->i_mutex);
+               if (atomic_read(&inode->i_count) > 1)
+                       goto skip;
+       }
 
        for (bindex = bstart; bindex <= bend; bindex++) {
                hidden_dentry = dtohd_index(dentry, bindex);

_______________________________________________
unionfs mailing list
[email protected]
http://www.fsl.cs.sunysb.edu/mailman/listinfo/unionfs

Reply via email to