Unionfs: unionfs_permission locking fixes
authorErez Zadok <ezk@cs.sunysb.edu>
Fri, 19 Sep 2008 03:13:24 +0000 (23:13 -0400)
committerErez Zadok <ezk@cs.sunysb.edu>
Fri, 19 Sep 2008 03:13:24 +0000 (23:13 -0400)
Signed-off-by: Erez Zadok <ezk@cs.sunysb.edu>
fs/unionfs/inode.c

index d08c2aa7ba12f6ecc0cad0a6c0b918c7686d4078..e43d4562a3a8aa96ba1a6b79631f9206ad122279 100644 (file)
@@ -789,6 +789,7 @@ 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);
 
        if (nd)
                unionfs_lock_dentry(nd->dentry, UNIONFS_DMUTEX_CHILD);
@@ -869,6 +870,7 @@ out:
        unionfs_check_nd(nd);
        if (nd)
                unionfs_unlock_dentry(nd->dentry);
+       iput(inode_grabbed);
        return err;
 }