[PATCH 08/13] xfs_{db,repair}: convert open-coded xfs_rtword_t pointer accesses to helper

Darrick J. Wong
2024-03-26T03:01:31Z

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

There are a bunch of places in xfs_db and xfs_repair where we use
open-coded logic to find a pointer to an xfs_rtword_t within a rt bitmap
buffer. Convert all that to helper functions for better type safety.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Bill O'Donnell <bodonnel@redhat.com>
---
db/check.c | 12 +++++++++---
repair/phase6.c | 12 ++++++++++--
2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/db/check.c b/db/check.c
index 6e06499b9eb3..a8f6310fcd25 100644
--- a/db/check.c
+++ b/db/check.c
@@ -3608,8 +3608,11 @@ process_rtbitmap(
bitsperblock = mp->m_sb.sb_blocksize * NBBY;
bit = extno = prevbit = start_bmbno = start_bit = 0;
bmbno = NULLFILEOFF;
- while ((bmbno = blkmap_next_off(blkmap, bmbno, &t)) !=
- NULLFILEOFF) {
+ while ((bmbno = blkmap_next_off(blkmap, bmbno, &t)) != NULLFILEOFF) {
+ struct xfs_rtalloc_args args = {
+ .mp = mp,
+ };
+
bno = blkmap_get(blkmap, bmbno);
if (bno == NULLFSBLOCK) {
if (!sflag)
@@ -3622,7 +3625,7 @@ process_rtbitmap(
push_cur();
set_cur(&typtab[TYP_RTBITMAP], XFS_FSB_TO_DADDR(mp, bno), blkbb,
DB_RING_IGN, NULL);
- if ((words = iocur_top->data) == NULL) {
+ if (!iocur_top->bp) {
if (!sflag)
dbprintf(_("can't read block %lld for rtbitmap "
"inode\n"),
@@ -3631,6 +3634,9 @@ process_rtbitmap(
pop_cur();
continue;
}
+
+ args.rbmbp = iocur_top->bp;
+ words = (xfs_rtword_t *)xfs_rbmblock_wordptr(&args, 0);
for (bit = 0;
bit < bitsperblock && extno < mp->m_sb.sb_rextents;
bit++, extno++) {
diff --git a/repair/phase6.c b/repair/phase6.c
index 3870c5c933a8..7b2044fd1dbb 100644
--- a/repair/phase6.c
+++ b/repair/phase6.c
@@ -593,6 +593,12 @@ fill_rbmino(xfs_mount_t *mp)
}

while (bno < mp->m_sb.sb_rbmblocks) {
+ struct xfs_rtalloc_args args = {
+ .mp = mp,
+ .tp = tp,
+ };
+ union xfs_rtword_raw *ondisk;
+
/*
* fill the file one block at a time
*/
@@ -618,11 +624,13 @@ _("can't access block %" PRIu64 " (fsbno %" PRIu64 ") of realtime bitmap inode %
return(1);
}

- memmove(bp->b_addr, bmp, mp->m_sb.sb_blocksize);
+ args.rbmbp = bp;
+ ondisk = xfs_rbmblock_wordptr(&args, 0);
+ memcpy(ondisk, bmp, mp->m_sb.sb_blocksize);

libxfs_trans_log_buf(tp, bp, 0, mp->m_sb.sb_blocksize - 1);

- bmp = (xfs_rtword_t *)((intptr_t) bmp + mp->m_sb.sb_blocksize);
+ bmp += mp->m_blockwsize;
bno++;
}