spufs: shift dget/mntget towards dentry_open()
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 25 Jun 2012 07:46:13 +0000 (11:46 +0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 22 Jul 2012 20:01:17 +0000 (00:01 +0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/powerpc/platforms/cell/spufs/inode.c

index 66519d2..1c9cac0 100644 (file)
@@ -323,22 +323,21 @@ static int spufs_context_open(struct dentry *dentry, struct vfsmount *mnt)
        struct file *filp;
 
        ret = get_unused_fd();
-       if (ret < 0) {
-               dput(dentry);
-               mntput(mnt);
-               goto out;
-       }
+       if (ret < 0)
+               return ret;
 
-       filp = dentry_open(dentry, mnt, O_RDONLY, current_cred());
+       /*
+        * get references for dget and mntget, will be released
+        * in error path of *_open().
+        */
+       filp = dentry_open(dget(dentry), mntget(mnt), O_RDONLY, current_cred());
        if (IS_ERR(filp)) {
                put_unused_fd(ret);
-               ret = PTR_ERR(filp);
-               goto out;
+               return PTR_ERR(filp);
        }
 
        filp->f_op = &spufs_context_fops;
        fd_install(ret, filp);
-out:
        return ret;
 }
 
@@ -495,11 +494,7 @@ spufs_create_context(struct inode *inode, struct dentry *dentry,
                        put_spu_context(neighbor);
        }
 
-       /*
-        * get references for dget and mntget, will be released
-        * in error path of *_open().
-        */
-       ret = spufs_context_open(dget(dentry), mntget(mnt));
+       ret = spufs_context_open(dentry, mnt);
        if (ret < 0) {
                WARN_ON(spufs_rmdir(inode, dentry));
                if (affinity)
@@ -562,22 +557,21 @@ static int spufs_gang_open(struct dentry *dentry, struct vfsmount *mnt)
        struct file *filp;
 
        ret = get_unused_fd();
-       if (ret < 0) {
-               dput(dentry);
-               mntput(mnt);
-               goto out;
-       }
+       if (ret < 0)
+               return ret;
 
-       filp = dentry_open(dentry, mnt, O_RDONLY, current_cred());
+       /*
+        * get references for dget and mntget, will be released
+        * in error path of *_open().
+        */
+       filp = dentry_open(dget(dentry), mntget(mnt), O_RDONLY, current_cred());
        if (IS_ERR(filp)) {
                put_unused_fd(ret);
-               ret = PTR_ERR(filp);
-               goto out;
+               return PTR_ERR(filp);
        }
 
        filp->f_op = &simple_dir_operations;
        fd_install(ret, filp);
-out:
        return ret;
 }
 
@@ -591,11 +585,7 @@ static int spufs_create_gang(struct inode *inode,
        if (ret)
                goto out;
 
-       /*
-        * get references for dget and mntget, will be released
-        * in error path of *_open().
-        */
-       ret = spufs_gang_open(dget(dentry), mntget(mnt));
+       ret = spufs_gang_open(dentry, mnt);
        if (ret < 0) {
                int err = simple_rmdir(inode, dentry);
                WARN_ON(err);