commit 0eb663e7aba6a3fa99ea2a726f5d0f76e442b7ce
Author: Erez_Zadok <[EMAIL PROTECTED]>
Date:   Fri May 11 02:19:40 2007 -0400

    mmap: also revalidate file passed to unionfs_release
    
    Conflicts:
    
        fs/unionfs/commonfops.c

diff --git a/fs/unionfs/commonfops.c b/fs/unionfs/commonfops.c
index eb890fa..a5f900c 100644
--- a/fs/unionfs/commonfops.c
+++ b/fs/unionfs/commonfops.c
@@ -640,11 +640,19 @@ out_nofree:
 int unionfs_file_release(struct inode *inode, struct file *file)
 {
        struct file *hidden_file = NULL;
-       struct unionfs_file_info *fileinfo = UNIONFS_F(file);
+       struct unionfs_file_info *fileinfo;
+       struct unionfs_inode_info *inodeinfo;
+       struct super_block *sb = inode->i_sb;
        int bindex, bstart, bend;
-       int fgen;
+       int fgen, err = 0;
+
+       unionfs_read_lock(sb);
+       if ((err = unionfs_file_revalidate(file, 1)))
+               goto out;
+       fileinfo = UNIONFS_F(file);
+       BUG_ON(file->f_dentry->d_inode != inode);
+       inodeinfo = UNIONFS_I(inode);
 
-       unionfs_read_lock(inode->i_sb);
        /* fput all the hidden files */
        fgen = atomic_read(&fileinfo->generation);
        bstart = fbstart(file);
@@ -655,17 +663,19 @@ int unionfs_file_release(struct inode *inode, struct file 
*file)
 
                if (hidden_file) {
                        fput(hidden_file);
-                       unionfs_read_lock(inode->i_sb);
-                       branchput(inode->i_sb, bindex);
-                       unionfs_read_unlock(inode->i_sb);
+                       unionfs_read_lock(sb);
+                       branchput(sb, bindex);
+                       unionfs_read_unlock(sb);
                }
        }
        kfree(fileinfo->lower_files);
        kfree(fileinfo->saved_branch_ids);
 
        kfree(fileinfo);
-       unionfs_read_unlock(inode->i_sb);
-       return 0;
+       unionfs_read_unlock(sb);
+
+out:
+       return err;
 }
 
 /* pass the ioctl to the lower fs */
_______________________________________________
unionfs-cvs mailing list: http://unionfs.filesystems.org/
[email protected]
http://www.fsl.cs.sunysb.edu/mailman/listinfo/unionfs-cvs

Reply via email to