]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
erofs: avoid noisy messages for transient -ENOMEM
authorGao Xiang <hsiangkao@linux.alibaba.com>
Fri, 26 Dec 2025 06:09:45 +0000 (14:09 +0800)
committerGao Xiang <hsiangkao@linux.alibaba.com>
Thu, 22 Jan 2026 16:01:34 +0000 (00:01 +0800)
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>
fs/erofs/zdata.c

index 70e1597dec8a60c1ee067dc299966365293b1d92..c62908f1ce478566bff907b44bffc136e48ba034 100644 (file)
@@ -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",