xfs: create helpers to deal with rounding xfs_fileoff_t to rtx boundaries

We're about to segment xfs_rtblock_t addresses, so we must create
type-specific helpers to do rt extent rounding of file block offsets
because the rtb helpers soon will not do the right thing there.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
Darrick J. Wong 2024-11-03 20:19:32 -08:00
parent ea99122b18
commit fd7588fa64
2 changed files with 16 additions and 7 deletions

View File

@ -135,13 +135,22 @@ xfs_rtb_roundup_rtx(
return roundup_64(rtbno, mp->m_sb.sb_rextsize);
}
/* Round this rtblock down to the nearest rt extent size. */
/* Round this file block offset up to the nearest rt extent size. */
static inline xfs_rtblock_t
xfs_rtb_rounddown_rtx(
xfs_fileoff_roundup_rtx(
struct xfs_mount *mp,
xfs_rtblock_t rtbno)
xfs_fileoff_t off)
{
return rounddown_64(rtbno, mp->m_sb.sb_rextsize);
return roundup_64(off, mp->m_sb.sb_rextsize);
}
/* Round this file block offset down to the nearest rt extent size. */
static inline xfs_rtblock_t
xfs_fileoff_rounddown_rtx(
struct xfs_mount *mp,
xfs_fileoff_t off)
{
return rounddown_64(off, mp->m_sb.sb_rextsize);
}
/* Convert an rt extent number to a file block offset in the rt bitmap file. */

View File

@ -541,7 +541,7 @@ xfs_can_free_eofblocks(
*/
end_fsb = XFS_B_TO_FSB(mp, (xfs_ufsize_t)XFS_ISIZE(ip));
if (xfs_inode_has_bigrtalloc(ip))
end_fsb = xfs_rtb_roundup_rtx(mp, end_fsb);
end_fsb = xfs_fileoff_roundup_rtx(mp, end_fsb);
last_fsb = XFS_B_TO_FSB(mp, mp->m_super->s_maxbytes);
if (last_fsb <= end_fsb)
return false;
@ -863,8 +863,8 @@ xfs_free_file_space(
/* We can only free complete realtime extents. */
if (xfs_inode_has_bigrtalloc(ip)) {
startoffset_fsb = xfs_rtb_roundup_rtx(mp, startoffset_fsb);
endoffset_fsb = xfs_rtb_rounddown_rtx(mp, endoffset_fsb);
startoffset_fsb = xfs_fileoff_roundup_rtx(mp, startoffset_fsb);
endoffset_fsb = xfs_fileoff_rounddown_rtx(mp, endoffset_fsb);
}
/*