xfs: create helpers to deal with rounding xfs_filblks_t to rtx boundaries
authorDarrick J. Wong <djwong@kernel.org>
Mon, 4 Nov 2024 04:19:33 +0000 (20:19 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 5 Nov 2024 21:38:43 +0000 (13:38 -0800)
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: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/libxfs/xfs_rtbitmap.c
fs/xfs/libxfs/xfs_rtbitmap.h
fs/xfs/xfs_exchrange.c

index 5abfd84..30220bf 100644 (file)
@@ -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;
index dc2b8be..e0fb36f 100644 (file)
@@ -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(
index 75cb53f..f644c4c 100644 (file)
@@ -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)