All of lore.kernel.org
 help / color / mirror / Atom feed
* [f2fs-dev] [PATCH v2] f2fs: fix hungtask when decompressed fail
@ 2022-06-08 13:48 Fengnan Chang
  2022-10-14  8:46 ` fengnan chang
  2022-11-02  2:05 ` Eric Biggers
  0 siblings, 2 replies; 9+ messages in thread
From: Fengnan Chang @ 2022-06-08 13:48 UTC (permalink / raw)
  To: jaegeuk, chao; +Cc: linux-f2fs-devel

When decompressed failed, f2fs_prepare_compress_overwrite will enter
endless loop, may casue hungtask.

[   14.088665] F2FS-fs (nvme0n1): lz4 decompress failed, ret:-4155
[   14.089851] F2FS-fs (nvme0n1): lz4 decompress failed, ret:-4155

Signed-off-by: Fengnan Chang <fengnanchang@gmail.com>
---
 fs/f2fs/compress.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index 24824cd96f36..1764e3859262 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -1060,7 +1060,7 @@ static int prepare_compress_overwrite(struct compress_ctx *cc,
 	sector_t last_block_in_bio;
 	unsigned fgp_flag = FGP_LOCK | FGP_WRITE | FGP_CREAT;
 	pgoff_t start_idx = start_idx_of_cluster(cc);
-	int i, ret;
+	int i, ret, retry_count = 3;
 
 retry:
 	ret = f2fs_is_compressed_cluster(cc->inode, start_idx);
@@ -1120,7 +1120,12 @@ static int prepare_compress_overwrite(struct compress_ctx *cc,
 			f2fs_put_rpages(cc);
 			f2fs_unlock_rpages(cc, i + 1);
 			f2fs_destroy_compress_ctx(cc, true);
-			goto retry;
+			retry_count--;
+			if (PageError(page) && !retry_count) {
+				ret = -EIO;
+				goto out;
+			} else
+				goto retry;
 		}
 	}
 
@@ -1657,10 +1662,16 @@ static void __f2fs_decompress_end_io(struct decompress_io_ctx *dic, bool failed)
 		if (!rpage)
 			continue;
 
-		/* PG_error was set if verity failed. */
-		if (failed || PageError(rpage)) {
+		if (failed) {
+			/* decompress page failed */
+			ClearPageUptodate(rpage);
+			SetPageError(rpage);
+		} else if (PageError(rpage)) {
+			/*
+			 * PG_error was set if verity failed.
+			 * will re-read again later.
+			 */
 			ClearPageUptodate(rpage);
-			/* will re-read again later */
 			ClearPageError(rpage);
 		} else {
 			SetPageUptodate(rpage);
-- 
2.25.1



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-11-02  3:48 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-06-08 13:48 [f2fs-dev] [PATCH v2] f2fs: fix hungtask when decompressed fail Fengnan Chang
2022-10-14  8:46 ` fengnan chang
2022-11-01  9:41   ` fengnan chang
2022-11-01 15:06     ` Chao Yu
2022-11-02  2:05 ` Eric Biggers
2022-11-02  3:06   ` fengnan chang
2022-11-02  3:18     ` Eric Biggers
2022-11-02  3:43       ` fengnan chang
2022-11-02  3:48         ` Eric Biggers

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.