GFS2: gfs2_create_inode(): don't bother with d_splice_alias()
authorAl Viro <viro@ZenIV.linux.org.uk>
Wed, 19 Nov 2014 19:35:24 +0000 (19:35 +0000)
committerSteven Whitehouse <swhiteho@redhat.com>
Thu, 20 Nov 2014 10:17:39 +0000 (10:17 +0000)
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>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
fs/gfs2/inode.c

index f41b2fd..9e8545b 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;