diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2014-09-18 17:42:35 -0400 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2014-11-19 12:57:21 -0500 |
| commit | 81295ce635a83f052497656348e9edc794b4cae6 (patch) | |
| tree | 02bf0e9f8b3bc6bde2dcb8821614daf9afd6d3d5 /fs/gfs2 | |
| parent | 986cdb862e4aafc92a1537e04388898fc42b8bc0 (diff) | |
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>
Diffstat (limited to 'fs/gfs2')
| -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 310e2487239d..ce0cf9ad5f97 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, | |||
| 596 | struct gfs2_inode *dip = GFS2_I(dir), *ip; | 596 | struct gfs2_inode *dip = GFS2_I(dir), *ip; |
| 597 | struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); | 597 | struct gfs2_sbd *sdp = GFS2_SB(&dip->i_inode); |
| 598 | struct gfs2_glock *io_gl; | 598 | struct gfs2_glock *io_gl; |
| 599 | struct dentry *d; | ||
| 600 | int error, free_vfs_inode = 0; | 599 | int error, free_vfs_inode = 0; |
| 601 | u32 aflags = 0; | 600 | u32 aflags = 0; |
| 602 | unsigned blocks = 1; | 601 | unsigned blocks = 1; |
| @@ -629,22 +628,13 @@ static int gfs2_create_inode(struct inode *dir, struct dentry *dentry, | |||
| 629 | inode = ERR_PTR(-EISDIR); | 628 | inode = ERR_PTR(-EISDIR); |
| 630 | goto fail_gunlock; | 629 | goto fail_gunlock; |
| 631 | } | 630 | } |
| 632 | d = d_splice_alias(inode, dentry); | 631 | d_instantiate(dentry, inode); |
| 633 | error = PTR_ERR(d); | ||
| 634 | if (IS_ERR(d)) { | ||
| 635 | inode = ERR_CAST(d); | ||
| 636 | goto fail_gunlock; | ||
| 637 | } | ||
| 638 | error = 0; | 632 | error = 0; |
| 639 | if (file) { | 633 | if (file) { |
| 640 | if (S_ISREG(inode->i_mode)) { | 634 | if (S_ISREG(inode->i_mode)) |
| 641 | WARN_ON(d != NULL); | ||
| 642 | error = finish_open(file, dentry, gfs2_open_common, opened); | 635 | error = finish_open(file, dentry, gfs2_open_common, opened); |
| 643 | } else { | 636 | else |
| 644 | error = finish_no_open(file, d); | 637 | error = finish_no_open(file, NULL); |
| 645 | } | ||
| 646 | } else { | ||
| 647 | dput(d); | ||
| 648 | } | 638 | } |
| 649 | gfs2_glock_dq_uninit(ghs); | 639 | gfs2_glock_dq_uninit(ghs); |
| 650 | return error; | 640 | return error; |
