From bcdef00061dfdd63582bf4bfa4968d9fe48dde9e Mon Sep 17 00:00:00 2001 From: Eric Kim Date: Sat, 20 Jun 2026 17:58:43 +0900 Subject: [PATCH 1/2] 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 cef4922..102f723 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 3cc33926a903f474fb4ebae302c6c5e61898ab9a Mon Sep 17 00:00:00 2001 From: Eric Kim Date: Sat, 20 Jun 2026 20:28:13 +0900 Subject: [PATCH 2/2] optimize nr_blk == 0 checking since this is an edge case. --- inode.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/inode.c b/inode.c index 102f723..058ec75 100644 --- a/inode.c +++ b/inode.c @@ -187,15 +187,10 @@ 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); }