@@ -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++) {
@@ -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++;
}