Unionfs: permission no longer takes a nameidata parameter
authorErez Zadok <ezk@cs.sunysb.edu>
Mon, 28 Jul 2008 04:36:13 +0000 (00:36 -0400)
committerErez Zadok <ezk@cs.sunysb.edu>
Fri, 12 Aug 2011 02:38:28 +0000 (22:38 -0400)
Signed-off-by: Erez Zadok <ezk@cs.sunysb.edu>
fs/unionfs/inode.c
fs/unionfs/whiteout.c

index 1a95e3bc8fca78bf5983904768709f42eea2a55f..0bd9fabd14bc215ae37500498aed204671d68bb0 100644 (file)
@@ -750,8 +750,7 @@ static void unionfs_put_link(struct dentry *dentry, struct nameidata *nd,
  * unionfs_permission, or anything it calls, will use stale branch
  * information.
  */
-static int unionfs_permission(struct inode *inode, int mask,
-                             struct nameidata *nd)
+static int unionfs_permission(struct inode *inode, int mask)
 {
        struct inode *lower_inode = NULL;
        int err = 0;
@@ -759,9 +758,6 @@ static int unionfs_permission(struct inode *inode, int mask,
        const int is_file = !S_ISDIR(inode->i_mode);
        const int write_mask = (mask & MAY_WRITE) && !(mask & MAY_READ);
 
-       if (nd)
-               unionfs_lock_dentry(nd->path.dentry, UNIONFS_DMUTEX_CHILD);
-
        if (!UNIONFS_I(inode)->lower_inodes) {
                if (is_file)    /* dirs can be unlinked but chdir'ed to */
                        err = -ESTALE;  /* force revalidate */
@@ -801,7 +797,7 @@ static int unionfs_permission(struct inode *inode, int mask,
                 * readonly, because those conditions should lead to a
                 * copyup taking place later on.
                 */
-               err = permission(lower_inode, mask, nd);
+               err = inode_permission(lower_inode, mask);
                if (err && bindex > 0) {
                        umode_t mode = lower_inode->i_mode;
                        if (is_robranch_super(inode->i_sb, bindex) &&
@@ -833,9 +829,6 @@ static int unionfs_permission(struct inode *inode, int mask,
 
 out:
        unionfs_check_inode(inode);
-       unionfs_check_nd(nd);
-       if (nd)
-               unionfs_unlock_dentry(nd->path.dentry);
        return err;
 }
 
index 94b52414c30036a3f95ee159d0d88bf5c8d5303b..db7a21e91bd806e6da8c7c0762423c0cc6cb2ea6 100644 (file)
@@ -455,7 +455,7 @@ int delete_whiteouts(struct dentry *dentry, int bindex,
        lower_dir = lower_dir_dentry->d_inode;
        BUG_ON(!S_ISDIR(lower_dir->i_mode));
 
-       if (!permission(lower_dir, MAY_WRITE | MAY_EXEC, NULL)) {
+       if (!inode_permission(lower_dir, MAY_WRITE | MAY_EXEC)) {
                err = do_delete_whiteouts(dentry, bindex, namelist);
        } else {
                args.deletewh.namelist = namelist;
@@ -492,7 +492,7 @@ int is_opaque_dir(struct dentry *dentry, int bindex)
 
        mutex_lock(&lower_inode->i_mutex);
 
-       if (!permission(lower_inode, MAY_EXEC, NULL)) {
+       if (!inode_permission(lower_inode, MAY_EXEC)) {
                wh_lower_dentry =
                        lookup_one_len(UNIONFS_DIR_OPAQUE, lower_dentry,
                                       sizeof(UNIONFS_DIR_OPAQUE) - 1);