diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2016-06-24 23:49:03 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2016-06-24 23:49:03 -0400 |
commit | b42b90d177d0c7f46f9c888c10c7900578ae7e09 (patch) | |
tree | 106cad0e70fd1a19db2019202dad90289e420ac2 | |
parent | ebaaa80e8f20ff2cbbccd6823f73a99565487502 (diff) | |
download | lwn-b42b90d177d0c7f46f9c888c10c7900578ae7e09.tar.gz lwn-b42b90d177d0c7f46f9c888c10c7900578ae7e09.zip |
ceph: fix d_obtain_alias() misuses
on failure d_obtain_alias() will have done iput()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | fs/ceph/export.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/fs/ceph/export.c b/fs/ceph/export.c index 6e72c98162d5..1780218a48f0 100644 --- a/fs/ceph/export.c +++ b/fs/ceph/export.c @@ -95,10 +95,8 @@ static struct dentry *__fh_to_dentry(struct super_block *sb, u64 ino) } dentry = d_obtain_alias(inode); - if (IS_ERR(dentry)) { - iput(inode); + if (IS_ERR(dentry)) return dentry; - } err = ceph_init_dentry(dentry); if (err < 0) { dput(dentry); @@ -167,10 +165,8 @@ static struct dentry *__get_parent(struct super_block *sb, return ERR_PTR(-ENOENT); dentry = d_obtain_alias(inode); - if (IS_ERR(dentry)) { - iput(inode); + if (IS_ERR(dentry)) return dentry; - } err = ceph_init_dentry(dentry); if (err < 0) { dput(dentry); @@ -210,7 +206,7 @@ static struct dentry *ceph_fh_to_parent(struct super_block *sb, dout("fh_to_parent %llx\n", cfh->parent_ino); dentry = __get_parent(sb, NULL, cfh->ino); - if (IS_ERR(dentry) && PTR_ERR(dentry) == -ENOENT) + if (unlikely(dentry == ERR_PTR(-ENOENT))) dentry = __fh_to_dentry(sb, cfh->parent_ino); return dentry; } |