This is a patch for link(2) and persistent inode number.
It re-uses unionfs inode.

Junjiro Okajima


diff -u -p -r1.1 -r1.2
--- unionfs-20060117-2031/main.c        18 Jan 2006 03:02:19 -0000      1.1
+++ unionfs-20060117-2031/main.c        18 Jan 2006 10:10:22 -0000      1.2
@@ -99,6 +99,10 @@ int unionfs_interpose(struct dentry *den
                }
        }
 
+       down(&inode->i_sem);
+       if (atomic_read(&inode->i_count) > 1)
+               goto skip;
+
        for (bindex = bstart; bindex <= bend; bindex++) {
                hidden_dentry = dtohd_index(dentry, bindex);
                if (!hidden_dentry) {
@@ -144,6 +157,7 @@ int unionfs_interpose(struct dentry *den
        /* all well, copy inode attributes */
        fist_copy_attr_all(inode, hidden_inode);
 
+ skip:
        /* only (our) lookup wants to do a d_add */
        switch (flag) {
        case INTERPOSE_DEFAULT:
@@ -163,6 +177,7 @@ int unionfs_interpose(struct dentry *den
 
        fist_print_dentry("Leaving unionfs_interpose", dentry);
        fist_print_inode("Leaving unionfs_interpose", inode);
+       up(&inode->i_sem);
 
       out:
        print_exit_status(err);
_______________________________________________
unionfs mailing list
[email protected]
http://www.fsl.cs.sunysb.edu/mailman/listinfo/unionfs

Reply via email to