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