Blame patches.suse/ceph-fix-inode-leak-on-getattr-error-in-_fh_to_dentry.patch
|
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 |
|