commit ab26f54d895199f79e9ba133ef923450ceb0bcbb
Author: Erez Zadok <[EMAIL PROTECTED]>
Date:   Thu Jan 10 07:13:01 2008 -0500

    Unionfs: don't check parent dentries
    
    Parent dentries may not be locked and may change, so don't check them.  But
    do check parent inodes if they are passed to the method.  Also, ensure the
    checks are done only if no error occurred.
    
    Signed-off-by: Erez Zadok <[EMAIL PROTECTED]>

diff --git a/fs/unionfs/commonfops.c b/fs/unionfs/commonfops.c
index 55f016e..00500f6 100644
--- a/fs/unionfs/commonfops.c
+++ b/fs/unionfs/commonfops.c
@@ -680,7 +680,6 @@ out_nofree:
                unionfs_copy_attr_times(dentry->d_parent->d_inode);
                unionfs_copy_attr_times(inode);
                unionfs_check_file(file);
-               unionfs_check_dentry(dentry->d_parent);
                unionfs_check_inode(inode);
        }
        unionfs_read_unlock(inode->i_sb);
diff --git a/fs/unionfs/file.c b/fs/unionfs/file.c
index b632042..0c424f6 100644
--- a/fs/unionfs/file.c
+++ b/fs/unionfs/file.c
@@ -66,7 +66,6 @@ out:
                /* copyup could cause parent dir times to change */
                unionfs_copy_attr_times(file->f_path.dentry->d_parent->d_inode);
                unionfs_check_file(file);
-               unionfs_check_dentry(file->f_path.dentry->d_parent);
        }
        unionfs_read_unlock(file->f_path.dentry->d_sb);
        return err;
diff --git a/fs/unionfs/inode.c b/fs/unionfs/inode.c
index 12754a1..087c5f2 100644
--- a/fs/unionfs/inode.c
+++ b/fs/unionfs/inode.c
@@ -123,7 +123,6 @@ out:
 
        unionfs_check_inode(parent);
        if (!err) {
-               unionfs_check_dentry(dentry->d_parent);
                unionfs_check_dentry(dentry);
                unionfs_check_nd(nd);
        }
@@ -173,14 +172,16 @@ static struct dentry *unionfs_lookup(struct inode *parent,
        }
 
        unionfs_check_inode(parent);
-       unionfs_check_dentry(dentry);
-       unionfs_check_dentry(dentry->d_parent);
-       unionfs_check_nd(nd);
-       if (!IS_ERR(ret))
+       if (!IS_ERR(ret)) {
+               unionfs_check_dentry(dentry);
+               unionfs_check_nd(nd);
                unionfs_unlock_dentry(dentry);
+       }
 
-       if (dentry != dentry->d_parent)
+       if (dentry != dentry->d_parent) {
+               unionfs_check_dentry(dentry->d_parent);
                unionfs_unlock_dentry(dentry->d_parent);
+       }
        unionfs_read_unlock(dentry->d_sb);
 
        return ret;
@@ -430,7 +431,8 @@ out:
                unionfs_postcopyup_setmnt(dentry);
 
        unionfs_check_inode(dir);
-       unionfs_check_dentry(dentry);
+       if (!err)
+               unionfs_check_dentry(dentry);
        unionfs_unlock_dentry(dentry);
        unionfs_read_unlock(dentry->d_sb);
 
@@ -632,7 +634,8 @@ out:
                unionfs_postcopyup_setmnt(dentry);
 
        unionfs_check_inode(dir);
-       unionfs_check_dentry(dentry);
+       if (!err)
+               unionfs_check_dentry(dentry);
        unionfs_unlock_dentry(dentry);
        unionfs_read_unlock(dentry->d_sb);
 
@@ -927,8 +930,8 @@ static int unionfs_setattr(struct dentry *dentry, struct 
iattr *ia)
        /* if setattr succeeded, then parent dir may have changed */
        unionfs_copy_attr_times(dentry->d_parent->d_inode);
 out:
-       unionfs_check_dentry(dentry);
-       unionfs_check_dentry(dentry->d_parent);
+       if (!err)
+               unionfs_check_dentry(dentry);
        unionfs_unlock_dentry(dentry);
        unionfs_read_unlock(dentry->d_sb);
 
_______________________________________________
unionfs-cvs mailing list: http://unionfs.filesystems.org/
[email protected]
http://www.fsl.cs.sunysb.edu/mailman/listinfo/unionfs-cvs

Reply via email to