* [PATCH] [PATCH v2] erofs: fix missing folio_unlock causing lock imbalance [not found] <20260331033300.21366-1-zhanxusheng@xiaomi.com> @ 2026-03-31 3:46 ` Zhan Xusheng 2026-03-31 3:55 ` Gao Xiang 0 siblings, 1 reply; 5+ messages in thread From: Zhan Xusheng @ 2026-03-31 3:46 UTC (permalink / raw) To: Gao Xiang; +Cc: Gao Xiang, linux-erofs, linux-kernel, Zhan Xusheng folio_trylock() in erofs_try_to_free_all_cached_folios() may successfully acquire the folio lock, but the subsequent check for erofs_folio_is_managed() can skip unlocking when the folio is not managed by EROFS. As Gao Xiang pointed out, this condition should not happen in practice because compressed_bvecs[] only holds valid cached folios at this point — any non-managed folio would have already been detached by z_erofs_cache_release_folio() under folio lock. Fix this by adding DBG_BUGON() to catch unexpected folios and ensure folio_unlock() is always called. Suggested-by: Gao Xiang <hsiangkao@linux.alibaba.com> Signed-off-by: Zhan Xusheng <zhanxusheng@xiaomi.com> --- fs/erofs/zdata.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c index fe8121df9ef2..b566996a0d1a 100644 --- a/fs/erofs/zdata.c +++ b/fs/erofs/zdata.c @@ -605,8 +605,7 @@ static int erofs_try_to_free_all_cached_folios(struct erofs_sb_info *sbi, if (!folio_trylock(folio)) return -EBUSY; - if (!erofs_folio_is_managed(sbi, folio)) - continue; + DBG_BUGON(!erofs_folio_is_managed(sbi, folio)); pcl->compressed_bvecs[i].page = NULL; folio_detach_private(folio); folio_unlock(folio); -- 2.43.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] [PATCH v2] erofs: fix missing folio_unlock causing lock imbalance 2026-03-31 3:46 ` [PATCH] [PATCH v2] erofs: fix missing folio_unlock causing lock imbalance Zhan Xusheng @ 2026-03-31 3:55 ` Gao Xiang 2026-03-31 5:02 ` [PATCH] [PATCH v3] erofs: ensure all folios are managed in erofs_try_to_free_all_cached_folios() Zhan Xusheng 0 siblings, 1 reply; 5+ messages in thread From: Gao Xiang @ 2026-03-31 3:55 UTC (permalink / raw) To: Zhan Xusheng, Gao Xiang; +Cc: linux-erofs, linux-kernel, Zhan Xusheng On 2026/3/31 11:46, Zhan Xusheng wrote: > folio_trylock() in erofs_try_to_free_all_cached_folios() may > successfully acquire the folio lock, but the subsequent check > for erofs_folio_is_managed() can skip unlocking when the folio > is not managed by EROFS. > > As Gao Xiang pointed out, this condition should not happen in > practice because compressed_bvecs[] only holds valid cached folios > at this point — any non-managed folio would have already been > detached by z_erofs_cache_release_folio() under folio lock. > > Fix this by adding DBG_BUGON() to catch unexpected folios > and ensure folio_unlock() is always called. > > Suggested-by: Gao Xiang <hsiangkao@linux.alibaba.com> > Signed-off-by: Zhan Xusheng <zhanxusheng@xiaomi.com> emmm, the patch subject needs to be changed too, like: [PATCH v3] erofs: ensure all folios are managed in erofs_try_to_free_all_cached_folios() Thanks, Gao Xiang > --- > fs/erofs/zdata.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c > index fe8121df9ef2..b566996a0d1a 100644 > --- a/fs/erofs/zdata.c > +++ b/fs/erofs/zdata.c > @@ -605,8 +605,7 @@ static int erofs_try_to_free_all_cached_folios(struct erofs_sb_info *sbi, > if (!folio_trylock(folio)) > return -EBUSY; > > - if (!erofs_folio_is_managed(sbi, folio)) > - continue; > + DBG_BUGON(!erofs_folio_is_managed(sbi, folio)); > pcl->compressed_bvecs[i].page = NULL; > folio_detach_private(folio); > folio_unlock(folio); ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] [PATCH v3] erofs: ensure all folios are managed in erofs_try_to_free_all_cached_folios() 2026-03-31 3:55 ` Gao Xiang @ 2026-03-31 5:02 ` Zhan Xusheng 2026-03-31 5:28 ` Gao Xiang 2026-04-02 6:46 ` Chunhai Guo 0 siblings, 2 replies; 5+ messages in thread From: Zhan Xusheng @ 2026-03-31 5:02 UTC (permalink / raw) To: Gao Xiang; +Cc: Gao Xiang, linux-erofs, linux-kernel, Zhan Xusheng folio_trylock() in erofs_try_to_free_all_cached_folios() may successfully acquire the folio lock, but the subsequent check for erofs_folio_is_managed() can skip unlocking when the folio is not managed by EROFS. As Gao Xiang pointed out, this condition should not happen in practice because compressed_bvecs[] only holds valid cached folios at this point — any non-managed folio would have already been detached by z_erofs_cache_release_folio() under folio lock. Fix this by adding DBG_BUGON() to catch unexpected folios and ensure folio_unlock() is always called. Suggested-by: Gao Xiang <hsiangkao@linux.alibaba.com> Signed-off-by: Zhan Xusheng <zhanxusheng@xiaomi.com> --- fs/erofs/zdata.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c index fe8121df9ef2..b566996a0d1a 100644 --- a/fs/erofs/zdata.c +++ b/fs/erofs/zdata.c @@ -605,8 +605,7 @@ static int erofs_try_to_free_all_cached_folios(struct erofs_sb_info *sbi, if (!folio_trylock(folio)) return -EBUSY; - if (!erofs_folio_is_managed(sbi, folio)) - continue; + DBG_BUGON(!erofs_folio_is_managed(sbi, folio)); pcl->compressed_bvecs[i].page = NULL; folio_detach_private(folio); folio_unlock(folio); -- 2.43.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] [PATCH v3] erofs: ensure all folios are managed in erofs_try_to_free_all_cached_folios() 2026-03-31 5:02 ` [PATCH] [PATCH v3] erofs: ensure all folios are managed in erofs_try_to_free_all_cached_folios() Zhan Xusheng @ 2026-03-31 5:28 ` Gao Xiang 2026-04-02 6:46 ` Chunhai Guo 1 sibling, 0 replies; 5+ messages in thread From: Gao Xiang @ 2026-03-31 5:28 UTC (permalink / raw) To: Zhan Xusheng, Gao Xiang; +Cc: linux-erofs, linux-kernel, Zhan Xusheng On 2026/3/31 13:02, Zhan Xusheng wrote: > folio_trylock() in erofs_try_to_free_all_cached_folios() may > successfully acquire the folio lock, but the subsequent check > for erofs_folio_is_managed() can skip unlocking when the folio > is not managed by EROFS. > > As Gao Xiang pointed out, this condition should not happen in > practice because compressed_bvecs[] only holds valid cached folios > at this point — any non-managed folio would have already been > detached by z_erofs_cache_release_folio() under folio lock. > > Fix this by adding DBG_BUGON() to catch unexpected folios > and ensure folio_unlock() is always called. > > Suggested-by: Gao Xiang <hsiangkao@linux.alibaba.com> > Signed-off-by: Zhan Xusheng <zhanxusheng@xiaomi.com> Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com> Thanks, Gao Xiang ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] [PATCH v3] erofs: ensure all folios are managed in erofs_try_to_free_all_cached_folios() 2026-03-31 5:02 ` [PATCH] [PATCH v3] erofs: ensure all folios are managed in erofs_try_to_free_all_cached_folios() Zhan Xusheng 2026-03-31 5:28 ` Gao Xiang @ 2026-04-02 6:46 ` Chunhai Guo 1 sibling, 0 replies; 5+ messages in thread From: Chunhai Guo @ 2026-04-02 6:46 UTC (permalink / raw) To: Zhan Xusheng, Gao Xiang Cc: Gao Xiang, linux-erofs, linux-kernel, Zhan Xusheng On 3/31/2026 1:02 PM, Zhan Xusheng wrote: > folio_trylock() in erofs_try_to_free_all_cached_folios() may > successfully acquire the folio lock, but the subsequent check > for erofs_folio_is_managed() can skip unlocking when the folio > is not managed by EROFS. > > As Gao Xiang pointed out, this condition should not happen in > practice because compressed_bvecs[] only holds valid cached folios > at this point — any non-managed folio would have already been > detached by z_erofs_cache_release_folio() under folio lock. > > Fix this by adding DBG_BUGON() to catch unexpected folios > and ensure folio_unlock() is always called. > > Suggested-by: Gao Xiang <hsiangkao@linux.alibaba.com> > Signed-off-by: Zhan Xusheng <zhanxusheng@xiaomi.com> Reviewed-by: Chunhai Guo <guochunhai@vivo.com> Thanks, ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-04-02 6:46 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20260331033300.21366-1-zhanxusheng@xiaomi.com>
2026-03-31 3:46 ` [PATCH] [PATCH v2] erofs: fix missing folio_unlock causing lock imbalance Zhan Xusheng
2026-03-31 3:55 ` Gao Xiang
2026-03-31 5:02 ` [PATCH] [PATCH v3] erofs: ensure all folios are managed in erofs_try_to_free_all_cached_folios() Zhan Xusheng
2026-03-31 5:28 ` Gao Xiang
2026-04-02 6:46 ` Chunhai Guo
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®