Commit 3f0205eb authored by Darrick J. Wong's avatar Darrick J. Wong
Browse files

xfs: create helpers to deal with rounding xfs_filblks_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 mapping block
lengths because the rtb helpers soon will not do the right thing there.

Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent fd7588fa
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1123,7 +1123,7 @@ xfs_rtfree_blocks(

	ASSERT(rtlen <= XFS_MAX_BMBT_EXTLEN);

	mod = xfs_rtb_to_rtxoff(mp, rtlen);
	mod = xfs_blen_to_rtxoff(mp, rtlen);
	if (mod) {
		ASSERT(mod == 0);
		return -EIO;
+21 −9
Original line number Diff line number Diff line
@@ -101,6 +101,27 @@ xfs_blen_to_rtbxlen(
	return div_u64(blen, mp->m_sb.sb_rextsize);
}

/* Return the offset of a file block length within an rt extent. */
static inline xfs_extlen_t
xfs_blen_to_rtxoff(
	struct xfs_mount	*mp,
	xfs_filblks_t		blen)
{
	if (likely(mp->m_rtxblklog >= 0))
		return blen & mp->m_rtxblkmask;

	return do_div(blen, mp->m_sb.sb_rextsize);
}

/* Round this block count up to the nearest rt extent size. */
static inline xfs_filblks_t
xfs_blen_roundup_rtx(
	struct xfs_mount	*mp,
	xfs_filblks_t		blen)
{
	return roundup_64(blen, mp->m_sb.sb_rextsize);
}

/* Convert an rt block number into an rt extent number. */
static inline xfs_rtxnum_t
xfs_rtb_to_rtx(
@@ -126,15 +147,6 @@ xfs_rtb_to_rtxoff(
	return do_div(rtbno, mp->m_sb.sb_rextsize);
}

/* Round this rtblock up to the nearest rt extent size. */
static inline xfs_rtblock_t
xfs_rtb_roundup_rtx(
	struct xfs_mount	*mp,
	xfs_rtblock_t		rtbno)
{
	return roundup_64(rtbno, mp->m_sb.sb_rextsize);
}

/* Round this file block offset up to the nearest rt extent size. */
static inline xfs_rtblock_t
xfs_fileoff_roundup_rtx(
+1 −1
Original line number Diff line number Diff line
@@ -217,7 +217,7 @@ xfs_exchrange_mappings(
	 * length in @fxr are safe to round up.
	 */
	if (xfs_inode_has_bigrtalloc(ip2))
		req.blockcount = xfs_rtb_roundup_rtx(mp, req.blockcount);
		req.blockcount = xfs_blen_roundup_rtx(mp, req.blockcount);

	error = xfs_exchrange_estimate(&req);
	if (error)