summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGao Xiang <hsiangkao@linux.alibaba.com>2025-12-26 09:09:45 +0300
committerGao Xiang <hsiangkao@linux.alibaba.com>2026-01-22 19:01:34 +0300
commit9aa64b62a73cbca226c0144dcf3cdf97294e0641 (patch)
tree3eb03307c187b4b3089a5fe1b34be36a2fc5271d
parent48df6d1bc9d5e8d2d778c39d952c3d6cc39e5c73 (diff)
downloadlinux-9aa64b62a73cbca226c0144dcf3cdf97294e0641.tar.xz
erofs: avoid noisy messages for transient -ENOMEM
EROFS may allocate temporary pages using GFP_NOWAIT | GFP_NORETRY when pcl->besteffort is off (e.g., for readahead requests). If the allocation fails, the original request will fall back to synchronous read, so the failure is transient. Such fallback can frequently happen in low memory scenarios, but since these failures are expected and temporary, avoid printing error messages like below: [ 7425.184264] erofs (device sr0): failed to decompress (lz4) -ENOMEM @ pa 148447232 size 28672 => 26788 [ 7426.244267] erofs (device sr0): failed to decompress (lz4) -ENOMEM @ pa 149422080 size 28672 => 15903 [ 7426.245508] erofs (device sr0): failed to decompress (lz4) -ENOMEM @ pa 138440704 size 28672 => 39294 ... [ 7504.258373] erofs (device sr0): failed to decompress (lz4) -ENOMEM @ pa 93581312 size 20480 => 47366 Fixes: 831faabed812 ("erofs: improve decompression error reporting") Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
-rw-r--r--fs/erofs/zdata.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c
index 70e1597dec8a..c62908f1ce47 100644
--- a/fs/erofs/zdata.c
+++ b/fs/erofs/zdata.c
@@ -1324,9 +1324,10 @@ static int z_erofs_decompress_pcluster(struct z_erofs_backend *be, bool eio)
GFP_NOWAIT | __GFP_NORETRY
}, be->pagepool);
if (IS_ERR(reason)) {
- erofs_err(be->sb, "failed to decompress (%s) %pe @ pa %llu size %u => %u",
- alg->name, reason, pcl->pos,
- pcl->pclustersize, pcl->length);
+ if (pcl->besteffort || reason != ERR_PTR(-ENOMEM))
+ erofs_err(be->sb, "failed to decompress (%s) %pe @ pa %llu size %u => %u",
+ alg->name, reason, pcl->pos,
+ pcl->pclustersize, pcl->length);
err = PTR_ERR(reason);
} else if (unlikely(reason)) {
erofs_err(be->sb, "failed to decompress (%s) %s @ pa %llu size %u => %u",