From: Darrick J. Wong <djwong@xxxxxxxxxx> Convert the repair program to use the new realtime extent types and helper functions instead of open-coding them. Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> --- repair/agheader.h | 2 +- repair/dinode.c | 21 ++++++++++++--------- repair/incore.c | 16 ++++++++-------- repair/incore.h | 4 ++-- repair/phase4.c | 16 ++++++++-------- repair/rt.c | 4 ++-- 6 files changed, 33 insertions(+), 30 deletions(-) diff --git a/repair/agheader.h b/repair/agheader.h index a63827c8725..e3e4a21e02b 100644 --- a/repair/agheader.h +++ b/repair/agheader.h @@ -11,7 +11,7 @@ typedef struct fs_geometry { uint32_t sb_blocksize; /* blocksize (bytes) */ xfs_rfsblock_t sb_dblocks; /* # data blocks */ xfs_rfsblock_t sb_rblocks; /* # realtime blocks */ - xfs_rtblock_t sb_rextents; /* # realtime extents */ + xfs_rtbxlen_t sb_rextents; /* # realtime extents */ xfs_fsblock_t sb_logstart; /* starting log block # */ xfs_agblock_t sb_rextsize; /* realtime extent size (blocks )*/ xfs_agblock_t sb_agblocks; /* # of blocks per ag */ diff --git a/repair/dinode.c b/repair/dinode.c index cc2c3474634..e66f93abb1d 100644 --- a/repair/dinode.c +++ b/repair/dinode.c @@ -194,13 +194,13 @@ process_rt_rec_dups( xfs_ino_t ino, struct xfs_bmbt_irec *irec) { - xfs_fsblock_t b; - xfs_rtblock_t ext; + xfs_rtblock_t b; + xfs_rtxnum_t ext; - for (b = rounddown(irec->br_startblock, mp->m_sb.sb_rextsize); + for (b = xfs_rtb_rounddown_rtx(mp, irec->br_startblock); b < irec->br_startblock + irec->br_blockcount; b += mp->m_sb.sb_rextsize) { - ext = (xfs_rtblock_t) b / mp->m_sb.sb_rextsize; + ext = xfs_rtb_to_rtxt(mp, b); if (search_rt_dup_extent(mp, ext)) { do_warn( _("data fork in rt ino %" PRIu64 " claims dup rt extent," @@ -224,14 +224,17 @@ process_rt_rec_state( struct xfs_bmbt_irec *irec) { xfs_fsblock_t b = irec->br_startblock; - xfs_rtblock_t ext; + xfs_rtxnum_t ext; int state; do { - ext = (xfs_rtblock_t)b / mp->m_sb.sb_rextsize; + xfs_extlen_t mod; + + ext = xfs_rtb_to_rtxt(mp, b); state = get_rtbmap(ext); - if ((b % mp->m_sb.sb_rextsize) != 0) { + xfs_rtb_to_rtx(mp, b, &mod); + if (mod) { /* * We are midway through a partially written extent. * If we don't find the state that gets set in the @@ -242,7 +245,7 @@ process_rt_rec_state( do_error( _("data fork in rt inode %" PRIu64 " found invalid rt extent %"PRIu64" state %d at rt block %"PRIu64"\n"), ino, ext, state, b); - b = roundup(b, mp->m_sb.sb_rextsize); + b = xfs_rtb_roundup_rtx(mp, b); continue; } @@ -2321,7 +2324,7 @@ validate_extsize( */ if ((flags & XFS_DIFLAG_EXTSZINHERIT) && (flags & XFS_DIFLAG_RTINHERIT) && - value % mp->m_sb.sb_rextsize > 0) + xfs_extlen_to_rtxmod(mp, value) > 0) misaligned = true; /* diff --git a/repair/incore.c b/repair/incore.c index f7a89e70d91..06edaf0d605 100644 --- a/repair/incore.c +++ b/repair/incore.c @@ -178,21 +178,21 @@ static size_t rt_bmap_size; */ int get_rtbmap( - xfs_rtblock_t bno) + xfs_rtxnum_t rtx) { - return (*(rt_bmap + bno / XR_BB_NUM) >> - ((bno % XR_BB_NUM) * XR_BB)) & XR_BB_MASK; + return (*(rt_bmap + rtx / XR_BB_NUM) >> + ((rtx % XR_BB_NUM) * XR_BB)) & XR_BB_MASK; } void set_rtbmap( - xfs_rtblock_t bno, + xfs_rtxnum_t rtx, int state) { - *(rt_bmap + bno / XR_BB_NUM) = - ((*(rt_bmap + bno / XR_BB_NUM) & - (~((uint64_t) XR_BB_MASK << ((bno % XR_BB_NUM) * XR_BB)))) | - (((uint64_t) state) << ((bno % XR_BB_NUM) * XR_BB))); + *(rt_bmap + rtx / XR_BB_NUM) = + ((*(rt_bmap + rtx / XR_BB_NUM) & + (~((uint64_t) XR_BB_MASK << ((rtx % XR_BB_NUM) * XR_BB)))) | + (((uint64_t) state) << ((rtx % XR_BB_NUM) * XR_BB))); } static void diff --git a/repair/incore.h b/repair/incore.h index 53609f683af..c31b778a0fb 100644 --- a/repair/incore.h +++ b/repair/incore.h @@ -28,8 +28,8 @@ void set_bmap_ext(xfs_agnumber_t agno, xfs_agblock_t agbno, int get_bmap_ext(xfs_agnumber_t agno, xfs_agblock_t agbno, xfs_agblock_t maxbno, xfs_extlen_t *blen); -void set_rtbmap(xfs_rtblock_t bno, int state); -int get_rtbmap(xfs_rtblock_t bno); +void set_rtbmap(xfs_rtxnum_t rtx, int state); +int get_rtbmap(xfs_rtxnum_t rtx); static inline void set_bmap(xfs_agnumber_t agno, xfs_agblock_t agbno, int state) diff --git a/repair/phase4.c b/repair/phase4.c index 28ecf56f45b..cfdea1460e5 100644 --- a/repair/phase4.c +++ b/repair/phase4.c @@ -229,9 +229,9 @@ void phase4(xfs_mount_t *mp) { ino_tree_node_t *irec; - xfs_rtblock_t bno; - xfs_rtblock_t rt_start; - xfs_extlen_t rt_len; + xfs_rtxnum_t rtx; + xfs_rtxnum_t rt_start; + xfs_rtxlen_t rt_len; xfs_agnumber_t i; xfs_agblock_t j; xfs_agblock_t ag_end; @@ -330,14 +330,14 @@ phase4(xfs_mount_t *mp) rt_start = 0; rt_len = 0; - for (bno = 0; bno < mp->m_sb.sb_rextents; bno++) { - bstate = get_rtbmap(bno); + for (rtx = 0; rtx < mp->m_sb.sb_rextents; rtx++) { + bstate = get_rtbmap(rtx); switch (bstate) { case XR_E_BAD_STATE: default: do_warn( _("unknown rt extent state, extent %" PRIu64 "\n"), - bno); + rtx); fallthrough; case XR_E_METADATA: case XR_E_UNKNOWN: @@ -360,14 +360,14 @@ phase4(xfs_mount_t *mp) break; case XR_E_MULT: if (rt_start == 0) { - rt_start = bno; + rt_start = rtx; rt_len = 1; } else if (rt_len == XFS_MAX_BMBT_EXTLEN) { /* * large extent case */ add_rt_dup_extent(rt_start, rt_len); - rt_start = bno; + rt_start = rtx; rt_len = 1; } else rt_len++; diff --git a/repair/rt.c b/repair/rt.c index a4cca7aa223..947382e9ede 100644 --- a/repair/rt.c +++ b/repair/rt.c @@ -48,8 +48,8 @@ generate_rtinfo(xfs_mount_t *mp, xfs_rtword_t *words, xfs_suminfo_t *sumcompute) { - xfs_rtblock_t extno; - xfs_rtblock_t start_ext; + xfs_rtxnum_t extno; + xfs_rtxnum_t start_ext; int bitsperblock; int bmbno; xfs_rtword_t freebit;