From: Joseph Qi <joseph.qi@linux.alibaba.com>
To: Andrew Morton <akpm@linux-foundation.org>,
Heming Zhao <heming.zhao@suse.com>
Cc: Mark Fasheh <mark@fasheh.com>, Joel Becker <jlbec@evilplan.org>,
ocfs2-devel@lists.linux.dev, linux-kernel@vger.kernel.org,
Joseph Qi <joseph.qi@linux.alibaba.com>
Subject: [PATCH 21/30] ocfs2: report unrepairable corruption from online filecheck fix
Date: Thu, 5 Nov 2026 17:49:17 +0800 [thread overview]
Message-ID: <20261105094926.3203416-22-joseph.qi@linux.alibaba.com> (raw)
In-Reply-To: <20261105094926.3203416-1-joseph.qi@linux.alibaba.com>
ocfs2_filecheck_repair_inode_block() starts with
if (!ocfs2_filecheck_validate_inode_block(sb, bh))
return 0;
so it proceeds when validation fails, but then returns 0 unconditionally
after repairing only i_blkno, fs_generation and l_next_free_rec. An
inode that fails any other check passes the signature and OCFS2_VALID_FL
gates, leaves changed at 0, and since its ecc was valid the final
recompute is skipped too. Nothing is written and userspace is told
SUCCESS for an inode that is still corrupt.
This already happens for the mode, i_rdev and size-without-clusters
checks. Re-validate after the repairs and return the residual code, so
the fix interface reports what it could not fix.
Documentation/filesystems/ocfs2-online-filecheck.rst already describes
this: "the inode must first be checked for errors before performing a
final fix".
Three consequences worth noting:
- Inodes failing those three existing checks now report INVALIDINO
instead of SUCCESS. No new error code is introduced, so the
ocfs2_filecheck_errs[] table and its userspace-visible names are
unchanged.
- A partial repair still marks the buffer dirty and is written back even
when an error is returned. The fields that were fixed are real
improvements and are not rolled back.
- The revalidation runs ocfs2_validate_meta_ecc() a second time, which
increments osb_ecc_stats again and emits a second
ocfs2_filecheck_validate_inode_block trace event per fix request.
Fixes: d56a8f32e4c6 ("ocfs2: check/fix inode block for online file check")
Cc: <stable@vger.kernel.org>
Signed-off-by: Joseph Qi <joseph.qi@linux.alibaba.com>
---
fs/ocfs2/inode.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/fs/ocfs2/inode.c b/fs/ocfs2/inode.c
index 115aad1b8926..cfa545981310 100644
--- a/fs/ocfs2/inode.c
+++ b/fs/ocfs2/inode.c
@@ -2122,7 +2122,11 @@ static int ocfs2_filecheck_repair_inode_block(struct super_block *sb,
(unsigned long long)bh->b_blocknr);
}
- return 0;
+ /*
+ * Only i_blkno, fs_generation and l_next_free_rec are repairable here,
+ * so report whatever is still wrong instead of claiming success.
+ */
+ return ocfs2_filecheck_validate_inode_block(sb, bh);
}
static int
--
2.39.3
next prev parent reply other threads:[~2026-11-05 9:49 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-05 9:48 [PATCH 00/30] ocfs2: split dinode validation into shared predicates Joseph Qi
2026-11-05 9:48 ` [PATCH 01/30] ocfs2: abstract the zero nlink or mode dinode check Joseph Qi
2026-11-05 9:48 ` [PATCH 02/30] ocfs2: abstract the dinode i_blkno mismatch check Joseph Qi
2026-11-05 9:48 ` [PATCH 03/30] ocfs2: abstract the dinode OCFS2_VALID_FL check Joseph Qi
2026-11-05 9:49 ` [PATCH 04/30] ocfs2: abstract the dinode fs_generation mismatch check Joseph Qi
2026-11-05 9:49 ` [PATCH 05/30] ocfs2: abstract the dinode suballoc slot checks Joseph Qi
2026-11-05 9:49 ` [PATCH 06/30] ocfs2: abstract the dinode suballoc bit check Joseph Qi
2026-11-05 9:49 ` [PATCH 07/30] ocfs2: abstract the dinode orphaned slot check Joseph Qi
2026-11-05 9:49 ` [PATCH 08/30] ocfs2: abstract the dinode DIO " Joseph Qi
2026-11-05 9:49 ` [PATCH 09/30] ocfs2: abstract the inline data dinode guard and cluster check Joseph Qi
2026-11-05 9:49 ` [PATCH 10/30] ocfs2: abstract the inline data id_count bound check Joseph Qi
2026-11-05 9:49 ` [PATCH 11/30] ocfs2: abstract the inline data i_size " Joseph Qi
2026-11-05 9:49 ` [PATCH 12/30] ocfs2: abstract the fast symlink dinode guard and size check Joseph Qi
2026-11-05 9:49 ` [PATCH 13/30] ocfs2: abstract the fast symlink NUL-termination check Joseph Qi
2026-11-05 9:49 ` [PATCH 14/30] ocfs2: abstract the chain list dinode guard and count check Joseph Qi
2026-11-05 9:49 ` [PATCH 15/30] ocfs2: abstract the chain list next free record check Joseph Qi
2026-11-05 9:49 ` [PATCH 16/30] ocfs2: abstract the chain list bits per cluster check Joseph Qi
2026-11-05 9:49 ` [PATCH 17/30] ocfs2: abstract the dinode refcount location check Joseph Qi
2026-11-05 9:49 ` [PATCH 18/30] ocfs2: abstract the zero extent list count check Joseph Qi
2026-11-05 9:49 ` [PATCH 19/30] ocfs2: abstract the oversized " Joseph Qi
2026-11-05 9:49 ` [PATCH 20/30] ocfs2: abstract the extent list next free record check Joseph Qi
2026-11-05 9:49 ` Joseph Qi [this message]
2026-11-05 9:49 ` [PATCH 22/30] ocfs2: check dinode nlink and mode in online filecheck Joseph Qi
2026-11-05 9:49 ` [PATCH 23/30] ocfs2: check dinode suballoc slot " Joseph Qi
2026-11-05 9:49 ` [PATCH 24/30] ocfs2: check dinode suballoc bit " Joseph Qi
2026-11-05 9:49 ` [PATCH 25/30] ocfs2: check dinode orphaned slots " Joseph Qi
2026-11-05 9:49 ` [PATCH 26/30] ocfs2: check inline data dinodes " Joseph Qi
2026-11-05 9:49 ` [PATCH 27/30] ocfs2: check fast symlink " Joseph Qi
2026-11-05 9:49 ` [PATCH 28/30] ocfs2: check chain list " Joseph Qi
2026-11-05 9:49 ` [PATCH 29/30] ocfs2: check dinode refcount location " Joseph Qi
2026-11-05 9:49 ` [PATCH 30/30] ocfs2: check extent list dinodes " Joseph Qi
2026-11-05 11:55 ` [PATCH 00/30] ocfs2: split dinode validation into shared predicates Joseph Qi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261105094926.3203416-22-joseph.qi@linux.alibaba.com \
--to=joseph.qi@linux.alibaba.com \
--cc=akpm@linux-foundation.org \
--cc=heming.zhao@suse.com \
--cc=jlbec@evilplan.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark@fasheh.com \
--cc=ocfs2-devel@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®