xfs: replace m_rsumsize with m_rsumblocks

Track the RT summary file size in blocks, just like the RT bitmap
file.  While we have users of both units, blocks are used slightly
more often and this matches the bitmap file for consistency.

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>
This commit is contained in:
Christoph Hellwig 2024-08-30 15:37:15 -07:00 committed by Darrick J. Wong
parent 1fc51cf11d
commit 33912286cb
7 changed files with 19 additions and 25 deletions

View File

@ -162,7 +162,7 @@ xfs_rtsummary_read_buf(
{ {
struct xfs_mount *mp = args->mp; struct xfs_mount *mp = args->mp;
if (XFS_IS_CORRUPT(mp, block >= XFS_B_TO_FSB(mp, mp->m_rsumsize))) { if (XFS_IS_CORRUPT(mp, block >= mp->m_rsumblocks)) {
xfs_rt_mark_sick(args->mp, XFS_SICK_RT_SUMMARY); xfs_rt_mark_sick(args->mp, XFS_SICK_RT_SUMMARY);
return -EFSCORRUPTED; return -EFSCORRUPTED;
} }

View File

@ -918,7 +918,7 @@ xfs_calc_growrtfree_reservation(
return xfs_calc_buf_res(1, mp->m_sb.sb_sectsize) + return xfs_calc_buf_res(1, mp->m_sb.sb_sectsize) +
xfs_calc_inode_res(mp, 2) + xfs_calc_inode_res(mp, 2) +
xfs_calc_buf_res(1, mp->m_sb.sb_blocksize) + xfs_calc_buf_res(1, mp->m_sb.sb_blocksize) +
xfs_calc_buf_res(1, mp->m_rsumsize); xfs_calc_buf_res(1, XFS_FSB_TO_B(mp, mp->m_rsumblocks));
} }
/* /*

View File

@ -63,7 +63,8 @@ xchk_setup_rtsummary(
* us to avoid pinning kernel memory for this purpose. * us to avoid pinning kernel memory for this purpose.
*/ */
descr = xchk_xfile_descr(sc, "realtime summary file"); descr = xchk_xfile_descr(sc, "realtime summary file");
error = xfile_create(descr, mp->m_rsumsize, &sc->xfile); error = xfile_create(descr, XFS_FSB_TO_B(mp, mp->m_rsumblocks),
&sc->xfile);
kfree(descr); kfree(descr);
if (error) if (error)
return error; return error;
@ -95,16 +96,14 @@ xchk_setup_rtsummary(
* volume. Hence it is safe to compute and check the geometry values. * volume. Hence it is safe to compute and check the geometry values.
*/ */
if (mp->m_sb.sb_rblocks) { if (mp->m_sb.sb_rblocks) {
xfs_filblks_t rsumblocks;
int rextslog; int rextslog;
rts->rextents = xfs_rtb_to_rtx(mp, mp->m_sb.sb_rblocks); rts->rextents = xfs_rtb_to_rtx(mp, mp->m_sb.sb_rblocks);
rextslog = xfs_compute_rextslog(rts->rextents); rextslog = xfs_compute_rextslog(rts->rextents);
rts->rsumlevels = rextslog + 1; rts->rsumlevels = rextslog + 1;
rts->rbmblocks = xfs_rtbitmap_blockcount(mp, rts->rextents); rts->rbmblocks = xfs_rtbitmap_blockcount(mp, rts->rextents);
rsumblocks = xfs_rtsummary_blockcount(mp, rts->rsumlevels, rts->rsumblocks = xfs_rtsummary_blockcount(mp, rts->rsumlevels,
rts->rbmblocks); rts->rbmblocks);
rts->rsumsize = XFS_FSB_TO_B(mp, rsumblocks);
} }
return 0; return 0;
} }
@ -316,7 +315,7 @@ xchk_rtsummary(
} }
/* Is m_rsumsize correct? */ /* Is m_rsumsize correct? */
if (mp->m_rsumsize != rts->rsumsize) { if (mp->m_rsumblocks != rts->rsumblocks) {
xchk_ino_set_corrupt(sc, mp->m_rsumip->i_ino); xchk_ino_set_corrupt(sc, mp->m_rsumip->i_ino);
goto out_rbm; goto out_rbm;
} }
@ -332,7 +331,7 @@ xchk_rtsummary(
* growfsrt expands the summary file before updating sb_rextents, so * growfsrt expands the summary file before updating sb_rextents, so
* the file can be larger than rsumsize. * the file can be larger than rsumsize.
*/ */
if (mp->m_rsumip->i_disk_size < rts->rsumsize) { if (mp->m_rsumip->i_disk_size < XFS_FSB_TO_B(mp, rts->rsumblocks)) {
xchk_ino_set_corrupt(sc, mp->m_rsumip->i_ino); xchk_ino_set_corrupt(sc, mp->m_rsumip->i_ino);
goto out_rbm; goto out_rbm;
} }

View File

@ -14,7 +14,7 @@ struct xchk_rtsummary {
uint64_t rextents; uint64_t rextents;
uint64_t rbmblocks; uint64_t rbmblocks;
uint64_t rsumsize; xfs_filblks_t rsumblocks;
unsigned int rsumlevels; unsigned int rsumlevels;
unsigned int resblks; unsigned int resblks;

View File

@ -56,7 +56,7 @@ xrep_setup_rtsummary(
* transaction (which we cannot drop because we cannot drop the * transaction (which we cannot drop because we cannot drop the
* rtsummary ILOCK) and cannot ask for more reservation. * rtsummary ILOCK) and cannot ask for more reservation.
*/ */
blocks = XFS_B_TO_FSB(mp, mp->m_rsumsize); blocks = mp->m_rsumblocks;
blocks += xfs_bmbt_calc_size(mp, blocks) * 2; blocks += xfs_bmbt_calc_size(mp, blocks) * 2;
if (blocks > UINT_MAX) if (blocks > UINT_MAX)
return -EOPNOTSUPP; return -EOPNOTSUPP;
@ -100,7 +100,6 @@ xrep_rtsummary(
{ {
struct xchk_rtsummary *rts = sc->buf; struct xchk_rtsummary *rts = sc->buf;
struct xfs_mount *mp = sc->mp; struct xfs_mount *mp = sc->mp;
xfs_filblks_t rsumblocks;
int error; int error;
/* We require the rmapbt to rebuild anything. */ /* We require the rmapbt to rebuild anything. */
@ -131,10 +130,9 @@ xrep_rtsummary(
} }
/* Make sure we have space allocated for the entire summary file. */ /* Make sure we have space allocated for the entire summary file. */
rsumblocks = XFS_B_TO_FSB(mp, rts->rsumsize);
xfs_trans_ijoin(sc->tp, sc->ip, 0); xfs_trans_ijoin(sc->tp, sc->ip, 0);
xfs_trans_ijoin(sc->tp, sc->tempip, 0); xfs_trans_ijoin(sc->tp, sc->tempip, 0);
error = xrep_tempfile_prealloc(sc, 0, rsumblocks); error = xrep_tempfile_prealloc(sc, 0, rts->rsumblocks);
if (error) if (error)
return error; return error;
@ -143,11 +141,11 @@ xrep_rtsummary(
return error; return error;
/* Copy the rtsummary file that we generated. */ /* Copy the rtsummary file that we generated. */
error = xrep_tempfile_copyin(sc, 0, rsumblocks, error = xrep_tempfile_copyin(sc, 0, rts->rsumblocks,
xrep_rtsummary_prep_buf, rts); xrep_rtsummary_prep_buf, rts);
if (error) if (error)
return error; return error;
error = xrep_tempfile_set_isize(sc, rts->rsumsize); error = xrep_tempfile_set_isize(sc, XFS_FSB_TO_B(mp, rts->rsumblocks));
if (error) if (error)
return error; return error;
@ -168,7 +166,7 @@ xrep_rtsummary(
memset(mp->m_rsum_cache, 0xFF, mp->m_sb.sb_rbmblocks); memset(mp->m_rsum_cache, 0xFF, mp->m_sb.sb_rbmblocks);
mp->m_rsumlevels = rts->rsumlevels; mp->m_rsumlevels = rts->rsumlevels;
mp->m_rsumsize = rts->rsumsize; mp->m_rsumblocks = rts->rsumblocks;
/* Free the old rtsummary blocks if they're not in use. */ /* Free the old rtsummary blocks if they're not in use. */
return xrep_reap_ifork(sc, sc->tempip, XFS_DATA_FORK); return xrep_reap_ifork(sc, sc->tempip, XFS_DATA_FORK);

View File

@ -147,7 +147,7 @@ typedef struct xfs_mount {
int m_logbufs; /* number of log buffers */ int m_logbufs; /* number of log buffers */
int m_logbsize; /* size of each log buffer */ int m_logbsize; /* size of each log buffer */
uint m_rsumlevels; /* rt summary levels */ uint m_rsumlevels; /* rt summary levels */
uint m_rsumsize; /* size of rt summary, bytes */ xfs_filblks_t m_rsumblocks; /* size of rt summary, FSBs */
int m_fixedfsid[2]; /* unchanged for life of FS */ int m_fixedfsid[2]; /* unchanged for life of FS */
uint m_qflags; /* quota status flags */ uint m_qflags; /* quota status flags */
uint64_t m_features; /* active filesystem features */ uint64_t m_features; /* active filesystem features */

View File

@ -734,9 +734,8 @@ xfs_growfs_rt_bmblock(
nmp->m_sb.sb_rextents = xfs_rtb_to_rtx(nmp, nmp->m_sb.sb_rblocks); nmp->m_sb.sb_rextents = xfs_rtb_to_rtx(nmp, nmp->m_sb.sb_rblocks);
nmp->m_sb.sb_rextslog = xfs_compute_rextslog(nmp->m_sb.sb_rextents); nmp->m_sb.sb_rextslog = xfs_compute_rextslog(nmp->m_sb.sb_rextents);
nmp->m_rsumlevels = nmp->m_sb.sb_rextslog + 1; nmp->m_rsumlevels = nmp->m_sb.sb_rextslog + 1;
nmp->m_rsumsize = XFS_FSB_TO_B(mp, nmp->m_rsumblocks = xfs_rtsummary_blockcount(mp, nmp->m_rsumlevels,
xfs_rtsummary_blockcount(mp, nmp->m_rsumlevels, nmp->m_sb.sb_rbmblocks);
nmp->m_sb.sb_rbmblocks));
/* /*
* Recompute the growfsrt reservation from the new rsumsize, so that the * Recompute the growfsrt reservation from the new rsumsize, so that the
@ -766,7 +765,7 @@ xfs_growfs_rt_bmblock(
* so that inode inactivation won't punch what it thinks are "posteof" * so that inode inactivation won't punch what it thinks are "posteof"
* blocks. * blocks.
*/ */
rsumip->i_disk_size = nmp->m_rsumsize; rsumip->i_disk_size = nmp->m_rsumblocks * nmp->m_sb.sb_blocksize;
i_size_write(VFS_I(rsumip), rsumip->i_disk_size); i_size_write(VFS_I(rsumip), rsumip->i_disk_size);
xfs_trans_log_inode(args.tp, rsumip, XFS_ILOG_CORE); xfs_trans_log_inode(args.tp, rsumip, XFS_ILOG_CORE);
@ -818,7 +817,7 @@ xfs_growfs_rt_bmblock(
* Update the calculated values in the real mount structure. * Update the calculated values in the real mount structure.
*/ */
mp->m_rsumlevels = nmp->m_rsumlevels; mp->m_rsumlevels = nmp->m_rsumlevels;
mp->m_rsumsize = nmp->m_rsumsize; mp->m_rsumblocks = nmp->m_rsumblocks;
xfs_mount_sb_set_rextsize(mp, &mp->m_sb); xfs_mount_sb_set_rextsize(mp, &mp->m_sb);
/* /*
@ -1022,7 +1021,6 @@ xfs_rtmount_init(
struct xfs_buf *bp; /* buffer for last block of subvolume */ struct xfs_buf *bp; /* buffer for last block of subvolume */
struct xfs_sb *sbp; /* filesystem superblock copy in mount */ struct xfs_sb *sbp; /* filesystem superblock copy in mount */
xfs_daddr_t d; /* address of last block of subvolume */ xfs_daddr_t d; /* address of last block of subvolume */
unsigned int rsumblocks;
int error; int error;
sbp = &mp->m_sb; sbp = &mp->m_sb;
@ -1034,9 +1032,8 @@ xfs_rtmount_init(
return -ENODEV; return -ENODEV;
} }
mp->m_rsumlevels = sbp->sb_rextslog + 1; mp->m_rsumlevels = sbp->sb_rextslog + 1;
rsumblocks = xfs_rtsummary_blockcount(mp, mp->m_rsumlevels, mp->m_rsumblocks = xfs_rtsummary_blockcount(mp, mp->m_rsumlevels,
mp->m_sb.sb_rbmblocks); mp->m_sb.sb_rbmblocks);
mp->m_rsumsize = XFS_FSB_TO_B(mp, rsumblocks);
mp->m_rbmip = mp->m_rsumip = NULL; mp->m_rbmip = mp->m_rsumip = NULL;
/* /*
* Check that the realtime section is an ok size. * Check that the realtime section is an ok size.