[PATCH] erofs: release ztailpacking pclusters properly

Jingbo Xu posted 1 patch 2 years, 3 months ago
fs/erofs/zdata.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
[PATCH] erofs: release ztailpacking pclusters properly
Posted by Jingbo Xu 2 years, 3 months ago
Currently ztailpacking pclusters are chained with FOLLOWED_NOINPLACE and
not recorded into the managed_pslots XArray.

After commit 7674a42f35ea ("erofs: use struct lockref to replace
handcrafted approach"), ztailpacking pclusters won't be freed with
erofs_workgroup_put() anymore, which will cause the following issue:

BUG erofs_pcluster-1 (Tainted: G           OE     ): Objects remaining in erofs_pcluster-1 on __kmem_cache_shutdown()

Use z_erofs_free_pcluster() directly to free ztailpacking pclusters.

Fixes: 7674a42f35ea ("erofs: use struct lockref to replace handcrafted approach")
Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>
---
 fs/erofs/zdata.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c
index de4f12152b62..5419405cafb3 100644
--- a/fs/erofs/zdata.c
+++ b/fs/erofs/zdata.c
@@ -1410,7 +1410,10 @@ static void z_erofs_decompress_queue(const struct z_erofs_decompressqueue *io,
 		owned = READ_ONCE(be.pcl->next);
 
 		z_erofs_decompress_pcluster(&be, io->eio ? -EIO : 0);
-		erofs_workgroup_put(&be.pcl->obj);
+		if (z_erofs_is_inline_pcluster(be.pcl))
+			z_erofs_free_pcluster(be.pcl);
+		else
+			erofs_workgroup_put(&be.pcl->obj);
 	}
 }
 
-- 
2.19.1.6.gb485710b
Re: [PATCH] erofs: release ztailpacking pclusters properly
Posted by Chao Yu 2 years, 3 months ago
On 2023/8/22 19:05, Jingbo Xu wrote:
> Currently ztailpacking pclusters are chained with FOLLOWED_NOINPLACE and
> not recorded into the managed_pslots XArray.
> 
> After commit 7674a42f35ea ("erofs: use struct lockref to replace
> handcrafted approach"), ztailpacking pclusters won't be freed with
> erofs_workgroup_put() anymore, which will cause the following issue:
> 
> BUG erofs_pcluster-1 (Tainted: G           OE     ): Objects remaining in erofs_pcluster-1 on __kmem_cache_shutdown()
> 
> Use z_erofs_free_pcluster() directly to free ztailpacking pclusters.
> 
> Fixes: 7674a42f35ea ("erofs: use struct lockref to replace handcrafted approach")
> Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>

Reviewed-by: Chao Yu <chao@kernel.org>

Thanks,
Re: [PATCH] erofs: release ztailpacking pclusters properly
Posted by Gao Xiang 2 years, 3 months ago

On 2023/8/22 19:05, Jingbo Xu wrote:
> Currently ztailpacking pclusters are chained with FOLLOWED_NOINPLACE and
> not recorded into the managed_pslots XArray.
> 
> After commit 7674a42f35ea ("erofs: use struct lockref to replace
> handcrafted approach"), ztailpacking pclusters won't be freed with
> erofs_workgroup_put() anymore, which will cause the following issue:
> 
> BUG erofs_pcluster-1 (Tainted: G           OE     ): Objects remaining in erofs_pcluster-1 on __kmem_cache_shutdown()
> 
> Use z_erofs_free_pcluster() directly to free ztailpacking pclusters.
> 
> Fixes: 7674a42f35ea ("erofs: use struct lockref to replace handcrafted approach")
> Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>

Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>

Thanks,
Gao Xiang