Luis Henriques 7d2074
From: Jeff Layton <jlayton@kernel.org>
Luis Henriques 7d2074
Date: Fri, 26 Mar 2021 09:21:53 -0400
Luis Henriques 7d2074
Subject: ceph: fix inode leak on getattr error in __fh_to_dentry
Luis Henriques 7d2074
Git-commit: 1775c7ddacfcea29051c67409087578f8f4d751b
Luis Henriques 7d2074
Patch-mainline: v5.13-rc1
Luis Henriques 7d2074
References: bsc#1186501
Luis Henriques 7d2074
Luis Henriques 7d2074
Fixes: 878dabb64117 ("ceph: don't return -ESTALE if there's still an open file")
Luis Henriques 7d2074
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Luis Henriques 7d2074
Reviewed-by: Xiubo Li <xiubli@redhat.com>
Luis Henriques 7d2074
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Luis Henriques 7d2074
Acked-by: Luis Henriques <lhenriques@suse.com>
Luis Henriques 7d2074
Luis Henriques 7d2074
---
Luis Henriques 7d2074
 fs/ceph/export.c | 4 +++-
Luis Henriques 7d2074
 1 file changed, 3 insertions(+), 1 deletion(-)
Luis Henriques 7d2074
Luis Henriques 7d2074
diff --git a/fs/ceph/export.c b/fs/ceph/export.c
Luis Henriques 7d2074
index e088843a7734..baa6368bece5 100644
Luis Henriques 7d2074
--- a/fs/ceph/export.c
Luis Henriques 7d2074
+++ b/fs/ceph/export.c
Luis Henriques 7d2074
@@ -178,8 +178,10 @@ static struct dentry *__fh_to_dentry(struct super_block *sb, u64 ino)
Luis Henriques 7d2074
 		return ERR_CAST(inode);
Luis Henriques 7d2074
 	/* We need LINK caps to reliably check i_nlink */
Luis Henriques 7d2074
 	err = ceph_do_getattr(inode, CEPH_CAP_LINK_SHARED, false);
Luis Henriques 7d2074
-	if (err)
Luis Henriques 7d2074
+	if (err) {
Luis Henriques 7d2074
+		iput(inode);
Luis Henriques 7d2074
 		return ERR_PTR(err);
Luis Henriques 7d2074
+	}
Luis Henriques 7d2074
 	/* -ESTALE if inode as been unlinked and no file is open */
Luis Henriques 7d2074
 	if ((inode->i_nlink == 0) && (atomic_read(&inode->i_count) == 1)) {
Luis Henriques 7d2074
 		iput(inode);
Luis Henriques 7d2074