[PATCH 2/6] xfs_repair: use xfs_validate_rt_geometry

Darrick J. Wong
2024-10-25T06:37:10Z

From: Christoph Hellwig <hch@lst.de>

Use shared libxfs code with the kernel instead of reimplementing it.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
libxfs/libxfs_api_defs.h | 1 +
repair/sb.c | 40 ++--------------------------------------
2 files changed, 3 insertions(+), 38 deletions(-)

diff --git a/libxfs/libxfs_api_defs.h b/libxfs/libxfs_api_defs.h
index a4173e5f7a595c..7c08d766623c0c 100644
--- a/libxfs/libxfs_api_defs.h
+++ b/libxfs/libxfs_api_defs.h
@@ -309,6 +309,7 @@

#define xfs_update_secondary_sbs libxfs_update_secondary_sbs

+#define xfs_validate_rt_geometry libxfs_validate_rt_geometry
#define xfs_validate_stripe_geometry libxfs_validate_stripe_geometry
#define xfs_verify_agbno libxfs_verify_agbno
#define xfs_verify_agbext libxfs_verify_agbext
diff --git a/repair/sb.c b/repair/sb.c
index 4b49c1b33c6c83..1320929caee590 100644
--- a/repair/sb.c
+++ b/repair/sb.c
@@ -447,44 +447,8 @@ verify_sb(char *sb_buf, xfs_sb_t *sb, int is_primary_sb)
return(XR_BAD_SECT_SIZE_DATA);
}

- /*
- * real-time extent size is always set
- */
- if (sb->sb_rextsize * sb->sb_blocksize > XFS_MAX_RTEXTSIZE)
- return(XR_BAD_RT_GEO_DATA);
-
- if (sb->sb_rextsize * sb->sb_blocksize < XFS_MIN_RTEXTSIZE)
- return(XR_BAD_RT_GEO_DATA);
-
- if (sb->sb_rblocks == 0) {
- if (sb->sb_rextents != 0)
- return(XR_BAD_RT_GEO_DATA);
-
- if (sb->sb_rbmblocks != 0)
- return(XR_BAD_RT_GEO_DATA);
-
- if (sb->sb_rextslog != 0)
- return(XR_BAD_RT_GEO_DATA);
-
- if (sb->sb_frextents != 0)
- return(XR_BAD_RT_GEO_DATA);
- } else {
- /*
- * if we have a real-time partition, sanity-check geometry
- */
- if (sb->sb_rblocks / sb->sb_rextsize != sb->sb_rextents)
- return(XR_BAD_RT_GEO_DATA);
-
- if (sb->sb_rextents == 0)
- return XR_BAD_RT_GEO_DATA;
-
- if (sb->sb_rextslog != libxfs_compute_rextslog(sb->sb_rextents))
- return(XR_BAD_RT_GEO_DATA);
-
- if (sb->sb_rbmblocks != (xfs_extlen_t) howmany(sb->sb_rextents,
- NBBY * sb->sb_blocksize))
- return(XR_BAD_RT_GEO_DATA);
- }
+ if (!libxfs_validate_rt_geometry(sb))
+ return XR_BAD_RT_GEO_DATA;

/*
* verify correctness of inode alignment if it's there