diff options
author | Al Viro <viro@ZenIV.linux.org.uk> | 2014-11-19 19:35:24 +0000 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2014-11-20 10:17:39 +0000 |
commit | 44bb31bac555b0faf2e7068f3a953d5b23883dc9 (patch) | |
tree | 6ee0d8138074d1a363f08365b323c5367af1aae2 /fs/gfs2/inode.c | |
parent | 571a4b57975aaaf50479a59882f1d44ae2737084 (diff) |
GFS2: gfs2_create_inode(): don't bother with d_splice_alias()
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>
Diffstat (limited to 'fs/gfs2/inode.c')
-rw-r--r-- | fs/gfs2/inode.c | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c index f41b2fd12416..9e8545bbc55c 100644 --- a/fs/gfs2/inode.c +++ b/fs/gfs2/inode.c @@ -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; |