GIT: unionfs2-2.6.27.y: Unionfs: unionfs_permission locking fixes
Erez Zadok
ezk at fsl.cs.sunysb.edu
Thu Aug 12 23:18:12 EDT 2010
commit e338a2987a9f2196e0ba0ae3580022ae33078935
Author: Erez Zadok <ezk at cs.sunysb.edu>
Date: Thu Sep 18 19:55:19 2008 -0400
Unionfs: unionfs_permission locking fixes
Signed-off-by: Erez Zadok <ezk at cs.sunysb.edu>
diff --git a/fs/unionfs/inode.c b/fs/unionfs/inode.c
index 8d42f72..800648e 100644
--- a/fs/unionfs/inode.c
+++ b/fs/unionfs/inode.c
@@ -785,6 +785,11 @@ static int unionfs_permission(struct inode *inode, int mask)
int bindex, bstart, bend;
const int is_file = !S_ISDIR(inode->i_mode);
const int write_mask = (mask & MAY_WRITE) && !(mask & MAY_READ);
+ struct inode *inode_grabbed = igrab(inode);
+ struct dentry *dentry = d_find_alias(inode);
+
+ if (dentry)
+ unionfs_lock_dentry(dentry, UNIONFS_DMUTEX_CHILD);
if (!UNIONFS_I(inode)->lower_inodes) {
if (is_file) /* dirs can be unlinked but chdir'ed to */
@@ -859,6 +864,11 @@ static int unionfs_permission(struct inode *inode, int mask)
out:
unionfs_check_inode(inode);
+ if (dentry) {
+ unionfs_unlock_dentry(dentry);
+ dput(dentry);
+ }
+ iput(inode_grabbed);
return err;
}
More information about the unionfs-cvs
mailing list