]> git.apps.os.sepia.ceph.com Git - xfsprogs-dev.git/commitdiff
xfs_{db,repair}: convert open-coded xfs_rtword_t pointer accesses to helper
authorDarrick J. Wong <djwong@kernel.org>
Mon, 15 Apr 2024 23:07:29 +0000 (16:07 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Wed, 17 Apr 2024 21:06:23 +0000 (14:06 -0700)
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
repair/phase6.c

index 6e06499b9eb34b4a3c91f44a267904785d9f3ecb..a8f6310fcd25823bc7155fb5e67109e7bbc4fc01 100644 (file)
@@ -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++) {
index 3870c5c933a835f2c4fa692c4e59a612db1a512d..7b2044fd1dbbe0b703e22f31a1b74423b96b9e51 100644 (file)
@@ -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++;
        }