mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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 19/30] ocfs2: abstract the oversized extent list count check
Date: Thu,  5 Nov 2026 17:49:15 +0800	[thread overview]
Message-ID: <20261105094926.3203416-20-joseph.qi@linux.alibaba.com> (raw)
In-Reply-To: <20261105094926.3203416-1-joseph.qi@linux.alibaba.com>

Fold the l_count against ocfs2_extent_recs_per_inode() test into a
predicate.

Move the rationale for using the no-xattr maximum into the predicate,
next to the bound it explains, rather than leaving it at the call site
where the bound is no longer computed.

No functional change intended.

Signed-off-by: Joseph Qi <joseph.qi@linux.alibaba.com>
---
 fs/ocfs2/inode.c | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/fs/ocfs2/inode.c b/fs/ocfs2/inode.c
index 70fb032ce891..f68f8a26e6ab 100644
--- a/fs/ocfs2/inode.c
+++ b/fs/ocfs2/inode.c
@@ -255,6 +255,19 @@ static bool ocfs2_dinode_has_zero_extent_count(struct ocfs2_dinode *di)
 	return le16_to_cpu(di->id2.i_list.l_count) == 0;
 }
 
+static bool ocfs2_dinode_has_oversized_extent_count(struct super_block *sb,
+						    struct ocfs2_dinode *di)
+{
+	/*
+	 * The exact capacity depends on i_xattr_inline_size, another
+	 * unvalidated on-disk field. Inline xattrs only shrink the list, so
+	 * the no-xattr maximum is a safe upper bound that a valid l_count
+	 * never exceeds.
+	 */
+	return le16_to_cpu(di->id2.i_list.l_count) >
+		ocfs2_extent_recs_per_inode(sb);
+}
+
 void ocfs2_set_inode_flags(struct inode *inode)
 {
 	unsigned int flags = OCFS2_I(inode)->ip_attr;
@@ -1908,13 +1921,7 @@ int ocfs2_validate_inode_block(struct super_block *sb,
 					 (unsigned long long)bh->b_blocknr);
 			goto bail;
 		}
-		/*
-		 * The exact capacity depends on i_xattr_inline_size, another
-		 * unvalidated on-disk field. Inline xattrs only shrink the
-		 * list, so the no-xattr maximum is a safe upper bound that a
-		 * valid l_count never exceeds.
-		 */
-		if (count > ocfs2_extent_recs_per_inode(sb)) {
+		if (ocfs2_dinode_has_oversized_extent_count(sb, di)) {
 			rc = ocfs2_error(sb,
 					 "Invalid dinode %llu: extent list l_count %u exceeds max %u\n",
 					 (unsigned long long)bh->b_blocknr, count,
-- 
2.39.3


  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 ` Joseph Qi [this message]
2026-11-05  9:49 ` [PATCH 20/30] ocfs2: abstract the extent list next free record check Joseph Qi
2026-11-05  9:49 ` [PATCH 21/30] ocfs2: report unrepairable corruption from online filecheck fix Joseph Qi
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-20-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®