commit 022e0eae72018ede1c35ea56859b93c7a834ca7a
Author: Yiannis Pericleous <[EMAIL PROTECTED]>
Date:   Sun May 20 15:29:37 2007 -0400

    fixed opaque dirs invariancy issue

diff --git a/fs/unionfs/lookup.c b/fs/unionfs/lookup.c
index 
b0898988f9436be39dabc8fa5ba92b2a464fabd7..c571ee498f96cd8c0a7e656c7277e0b80c3ea506
 100644
--- a/fs/unionfs/lookup.c
+++ b/fs/unionfs/lookup.c
@@ -296,6 +296,23 @@ out_positive:
                        err = -ENOENT;
                        goto out_drop;
                }
+
+               /* if the dentry is an opaque dir we must release everything 
after the opaqueness branch */
+               else if (S_ISDIR(dentry->d_inode->i_mode) &&
+                               odf_get_opaque(dentry->d_sb, dentry) != -1) {
+                       for (bindex = dbend(dentry) + 1; bindex < 
sbmax(dentry->d_sb); bindex++) {
+                               if (unionfs_lower_dentry_idx(dentry, bindex))
+                                       dput(unionfs_lower_dentry_idx(dentry, 
bindex));
+                               unionfs_set_lower_dentry_idx(dentry, bindex, 
NULL);
+                               if (unionfs_lower_mnt_idx(dentry, bindex))
+                                       unionfs_mntput(dentry, bindex);
+                               unionfs_set_lower_mnt_idx(dentry, bindex, NULL);
+                               if(unionfs_lower_inode_idx(dentry->d_inode, 
bindex))
+                                       
iput(unionfs_lower_inode_idx(dentry->d_inode, bindex));
+                               unionfs_set_lower_inode_idx(dentry->d_inode, 
bindex, NULL);
+                                       
+                       }
+               }
        }
 
        goto out;
_______________________________________________
unionfs-cvs mailing list: http://unionfs.filesystems.org/
[email protected]
http://www.fsl.cs.sunysb.edu/mailman/listinfo/unionfs-cvs

Reply via email to