gfs2_create_inode(): don't bother with d_splice_alias()
authorAl Viro <viro@zeniv.linux.org.uk>
Thu, 18 Sep 2014 21:42:35 +0000 (17:42 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 19 Nov 2014 17:57:21 +0000 (12:57 -0500)
dentry is always hashed and negative, inode - non-error, non-NULL and
non-directory.  In such conditions d_splice_alias() is equivalent to
"d_instantiate(dentry, inode) and return NULL", which simplifies the
downstream code and is consistent with the "have to create a new object"
case.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/gfs2/inode.c

index 310e2487239da4572927415f318c98a664e76d00..ce0cf9ad5f970988fb2e536fb37fef54cbb8e4b4 100644 (file)
@@ -596,7 +596,6 @@ static int gfs2_create_inode(struct inode *dir, struct dentry *dentry,
        struct gfs2_inode *dip = GFS2_I(dir), *ip;
        struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode);
        struct gfs2_glock *io_gl;
-       struct dentry *d;
        int error, free_vfs_inode = 0;
        u32 aflags = 0;
        unsigned blocks = 1;
@@ -629,22 +628,13 @@ static int gfs2_create_inode(struct inode *dir, struct dentry *dentry,
                        inode = ERR_PTR(-EISDIR);
                        goto fail_gunlock;
                }
-               d = d_splice_alias(inode, dentry);
-               error = PTR_ERR(d);
-               if (IS_ERR(d)) {
-                       inode = ERR_CAST(d);
-                       goto fail_gunlock;
-               }
+               d_instantiate(dentry, inode);
                error = 0;
                if (file) {
-                       if (S_ISREG(inode->i_mode)) {
-                               WARN_ON(d != NULL);
+                       if (S_ISREG(inode->i_mode))
                                error = finish_open(file, dentry, gfs2_open_common, opened);
-                       } else {
-                               error = finish_no_open(file, d);
-                       }
-               } else {
-                       dput(d);
+                       else
+                               error = finish_no_open(file, NULL);
                }
                gfs2_glock_dq_uninit(ghs);
                return error;