On 2026/6/22 11:51, Gao Xiang wrote:
Hi Yifan,
On 2026/6/22 11:42, Yifan Zhao wrote:
-ENOSPC can be a normal compression fallback when fragments are off.
Keep the global compression context reusable for that case while
preserving the fatal state for real errors.
Fixes: a729584ef975 ("erofs-utils: mkfs: avoid hanging if fragment is
on and tmpdir is full")
Reported-by: Bastian Schmitz <[email protected]>
Closes: https://github.com/erofs/erofs-utils/issues/50
Assisted-by: Codex:GPT-5.5
Signed-off-by: Yifan Zhao <[email protected]>
---
lib/compress.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/lib/compress.c b/lib/compress.c
index ea07409..2a43b81 100644
--- a/lib/compress.c
+++ b/lib/compress.c
@@ -2031,7 +2031,11 @@ err_free_idata:
out:
#ifdef EROFS_MT_ENABLED
pthread_mutex_lock(&ictx->mutex);
- ictx->seg_num = ret < 0 ? INT_MAX : 0;
+ if (ret < 0 && (ret != -ENOSPC || inode->fragment_size))
Thanks for the fix! but why `inode->fragment_size`
is used here?
My understanding is that once inode->fragment_size is non-zero, -ENOSPC
means real failure rather than compression fallback. (lib/compress.c:1374)
Thanks,
Yifan
I guess if (ret < 0 && ret != -ENOSPC) is enough?
Thanks,
Gao Xiang