From ffbd18cf1a62bc6f6530377f7b51b63eb900353b Mon Sep 17 00:00:00 2001 From: Eric Kim Date: Sat, 20 Jun 2026 17:58:43 +0900 Subject: [PATCH 1/4] Fix: in case of filesystem corruption, prevent lookup soft lockup --- inode.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/inode.c b/inode.c index 4c8dc02..31bf3e4 100644 --- a/inode.c +++ b/inode.c @@ -186,7 +186,16 @@ static int __file_lookup(struct inode *dir, *fi = _fi; return 0; } - _fi += dblock->files[_fi].nr_blk; + + if (!dblock->files[_fi].nr_blk) { + /* + this means the _ei and _bi we're looking for is looking at + an empty block, which means the filesystem is corrupted. + */ + return -EUCLEAN; + } else { + _fi += dblock->files[_fi].nr_blk; + } } RELEASE_BUFFER_HEAD(*ret_bi_bh); } From cfe679b20f9186e413d96cc08cd00b4acb0a4bd7 Mon Sep 17 00:00:00 2001 From: Eric Kim Date: Sat, 20 Jun 2026 18:21:36 +0900 Subject: [PATCH 2/4] coding style fixes --- inode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inode.c b/inode.c index 31bf3e4..31b8f0b 100644 --- a/inode.c +++ b/inode.c @@ -186,7 +186,7 @@ static int __file_lookup(struct inode *dir, *fi = _fi; return 0; } - + if (!dblock->files[_fi].nr_blk) { /* this means the _ei and _bi we're looking for is looking at From fb678695d4fcff00f3d46a230e7c098c0ffde7d7 Mon Sep 17 00:00:00 2001 From: Eric Kim Date: Sat, 20 Jun 2026 20:28:13 +0900 Subject: [PATCH 3/4] optimize nr_blk == 0 checking since this is an edge case. --- inode.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/inode.c b/inode.c index 31b8f0b..12b8f80 100644 --- a/inode.c +++ b/inode.c @@ -187,15 +187,11 @@ static int __file_lookup(struct inode *dir, return 0; } - if (!dblock->files[_fi].nr_blk) { - /* - this means the _ei and _bi we're looking for is looking at - an empty block, which means the filesystem is corrupted. - */ + if (unlikely(!dblock->files[_fi].nr_blk)) { return -EUCLEAN; - } else { - _fi += dblock->files[_fi].nr_blk; } + + _fi += dblock->files[_fi].nr_blk; } RELEASE_BUFFER_HEAD(*ret_bi_bh); } From 27bc38e3a41df6a556d7f1f255f603ab9efc809a Mon Sep 17 00:00:00 2001 From: Eric Kim Date: Sat, 20 Jun 2026 23:12:12 +0900 Subject: [PATCH 4/4] remove unnecessary brackets --- inode.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/inode.c b/inode.c index 12b8f80..02ddf86 100644 --- a/inode.c +++ b/inode.c @@ -187,9 +187,8 @@ static int __file_lookup(struct inode *dir, return 0; } - if (unlikely(!dblock->files[_fi].nr_blk)) { + if (unlikely(!dblock->files[_fi].nr_blk)) return -EUCLEAN; - } _fi += dblock->files[_fi].nr_blk; }