[PATCH 6/8] xfs_repair: constrain attr fork extent count

Darrick J. Wong
2024-03-26T03:27:06Z

From: Darrick J. Wong <djwong@kernel.org>

Don't let the attr fork extent count exceed the maximum possible value.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
---
repair/dinode.c | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/repair/dinode.c b/repair/dinode.c
index b8f5bf4e550e..bf93a5790877 100644
--- a/repair/dinode.c
+++ b/repair/dinode.c
@@ -2050,6 +2050,7 @@ process_inode_attr_fork(
xfs_ino_t lino = XFS_AGINO_TO_INO(mp, agno, ino);
struct xfs_dinode *dino = *dinop;
struct blkmap *ablkmap = NULL;
+ xfs_extnum_t max_nex;
int repair = 0;
int err;
int try_rebuild = -1; /* don't know yet */
@@ -2071,6 +2072,11 @@ process_inode_attr_fork(
}

*anextents = xfs_dfork_attr_extents(dino);
+ max_nex = xfs_iext_max_nextents(
+ xfs_dinode_has_large_extent_counts(dino),
+ XFS_ATTR_FORK);
+ if (*anextents > max_nex)
+ *anextents = 1;
if (*anextents > be64_to_cpu(dino->di_nblocks))
*anextents = 1;