xfs_repair: constrain attr fork extent count
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>
diff --git a/repair/dinode.c b/repair/dinode.c
index b8f5bf4..bf93a57 100644
--- a/repair/dinode.c
+++ b/repair/dinode.c
@@ -2050,6 +2050,7 @@
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 @@
}
*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;