diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2018-06-24 02:27:29 +0200 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2018-06-24 02:27:29 +0200 |
commit | 50f307401113350a8d46ca45cace07a92c9bedc8 (patch) | |
tree | 75e57cd1b28b1b6f3a545aa47b94137a144e5880 /fs/hostfs | |
parent | Linux 4.18-rc1 (diff) | |
download | linux-50f307401113350a8d46ca45cace07a92c9bedc8.tar.xz linux-50f307401113350a8d46ca45cace07a92c9bedc8.zip |
hostfs_lookup: switch to d_splice_alias()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/hostfs')
-rw-r--r-- | fs/hostfs/hostfs_kern.c | 28 |
1 files changed, 8 insertions, 20 deletions
diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c index 2597b290c2a5..444c7b170359 100644 --- a/fs/hostfs/hostfs_kern.c +++ b/fs/hostfs/hostfs_kern.c @@ -610,33 +610,21 @@ static struct dentry *hostfs_lookup(struct inode *ino, struct dentry *dentry, int err; inode = hostfs_iget(ino->i_sb); - if (IS_ERR(inode)) { - err = PTR_ERR(inode); + if (IS_ERR(inode)) goto out; - } err = -ENOMEM; name = dentry_name(dentry); - if (name == NULL) - goto out_put; - - err = read_name(inode, name); - - __putname(name); - if (err == -ENOENT) { + if (name) { + err = read_name(inode, name); + __putname(name); + } + if (err) { iput(inode); - inode = NULL; + inode = (err == -ENOENT) ? NULL : ERR_PTR(err); } - else if (err) - goto out_put; - - d_add(dentry, inode); - return NULL; - - out_put: - iput(inode); out: - return ERR_PTR(err); + return d_splice_alias(inode, dentry); } static int hostfs_link(struct dentry *to, struct inode *ino, |