]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
xfs: create a helper to convert rtextents to rtblocks
authorDarrick J. Wong <djwong@kernel.org>
Mon, 16 Oct 2023 16:32:54 +0000 (09:32 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 17 Oct 2023 23:24:22 +0000 (16:24 -0700)
Create a helper to convert a realtime extent to a realtime block.  Later
on we'll change the helper to use bit shifts when possible.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/libxfs/xfs_rtbitmap.h
fs/xfs/scrub/rtbitmap.c
fs/xfs/scrub/rtsummary.c
fs/xfs/xfs_bmap_util.c
fs/xfs/xfs_fsmap.c
fs/xfs/xfs_super.c

index 5e2afb7fea0e749e37d8c6ac238eb066bd865daf..099ea8902aaaf59a334bfec54526af6418b05273 100644 (file)
@@ -6,6 +6,22 @@
 #ifndef __XFS_RTBITMAP_H__
 #define        __XFS_RTBITMAP_H__
 
+static inline xfs_rtblock_t
+xfs_rtx_to_rtb(
+       struct xfs_mount        *mp,
+       xfs_rtxnum_t            rtx)
+{
+       return rtx * mp->m_sb.sb_rextsize;
+}
+
+static inline xfs_extlen_t
+xfs_rtxlen_to_extlen(
+       struct xfs_mount        *mp,
+       xfs_rtxlen_t            rtxlen)
+{
+       return rtxlen * mp->m_sb.sb_rextsize;
+}
+
 /*
  * Functions for walking free space rtextents in the realtime bitmap.
  */
index bea5a2b75a068b5d23bb1a38e1eac9a5bb3fcf6c..584a2b8badac2631c6bd46db63447b9bb791af3d 100644 (file)
@@ -50,8 +50,8 @@ xchk_rtbitmap_rec(
        xfs_rtblock_t           startblock;
        xfs_filblks_t           blockcount;
 
-       startblock = rec->ar_startext * mp->m_sb.sb_rextsize;
-       blockcount = rec->ar_extcount * mp->m_sb.sb_rextsize;
+       startblock = xfs_rtx_to_rtb(mp, rec->ar_startext);
+       blockcount = xfs_rtx_to_rtb(mp, rec->ar_extcount);
 
        if (!xfs_verify_rtbext(mp, startblock, blockcount))
                xchk_fblock_set_corrupt(sc, XFS_DATA_FORK, 0);
index d998f0c378a49f437c99cf86e13e9b78f3dff00d..d363286e8b72702025ef34f58e7c1ec46518b8b2 100644 (file)
@@ -134,8 +134,8 @@ xchk_rtsum_record_free(
        lenlog = XFS_RTBLOCKLOG(rec->ar_extcount);
        offs = XFS_SUMOFFS(mp, lenlog, rbmoff);
 
-       rtbno = rec->ar_startext * mp->m_sb.sb_rextsize;
-       rtlen = rec->ar_extcount * mp->m_sb.sb_rextsize;
+       rtbno = xfs_rtx_to_rtb(mp, rec->ar_startext);
+       rtlen = xfs_rtx_to_rtb(mp, rec->ar_extcount);
 
        if (!xfs_verify_rtbext(mp, rtbno, rtlen)) {
                xchk_ino_xref_set_corrupt(sc, mp->m_rbmip->i_ino);
index 557330281ae3938ab71b0fec3ea3562eabe495a7..2d747084c1993092acf906144823fdbc08ab26a2 100644 (file)
@@ -28,6 +28,7 @@
 #include "xfs_icache.h"
 #include "xfs_iomap.h"
 #include "xfs_reflink.h"
+#include "xfs_rtbitmap.h"
 
 /* Kernel only BMAP related definitions and functions */
 
@@ -125,7 +126,7 @@ retry:
         * XFS_BMBT_MAX_EXTLEN), we don't hear about that number, and can't
         * adjust the starting point to match it.
         */
-       if (ralen * mp->m_sb.sb_rextsize >= XFS_MAX_BMBT_EXTLEN)
+       if (xfs_rtxlen_to_extlen(mp, ralen) >= XFS_MAX_BMBT_EXTLEN)
                ralen = XFS_MAX_BMBT_EXTLEN / mp->m_sb.sb_rextsize;
 
        /*
@@ -147,7 +148,7 @@ retry:
                error = xfs_rtpick_extent(mp, ap->tp, ralen, &rtx);
                if (error)
                        return error;
-               ap->blkno = rtx * mp->m_sb.sb_rextsize;
+               ap->blkno = xfs_rtx_to_rtb(mp, rtx);
        } else {
                ap->blkno = 0;
        }
@@ -170,8 +171,8 @@ retry:
                return error;
 
        if (rtx != NULLRTEXTNO) {
-               ap->blkno = rtx * mp->m_sb.sb_rextsize;
-               ap->length = ralen * mp->m_sb.sb_rextsize;
+               ap->blkno = xfs_rtx_to_rtb(mp, rtx);
+               ap->length = xfs_rtxlen_to_extlen(mp, ralen);
                ap->ip->i_nblocks += ap->length;
                xfs_trans_log_inode(ap->tp, ap->ip, XFS_ILOG_CORE);
                if (ap->wasdel)
index 8982c5d6cbd0653e2e7f67c5af69ef2f4b8f9ea3..1a187bc9da3de04130575448e00b6cb029414285 100644 (file)
@@ -483,11 +483,11 @@ xfs_getfsmap_rtdev_rtbitmap_helper(
        xfs_rtblock_t                   rtbno;
        xfs_daddr_t                     rec_daddr, len_daddr;
 
-       rtbno = rec->ar_startext * mp->m_sb.sb_rextsize;
+       rtbno = xfs_rtx_to_rtb(mp, rec->ar_startext);
        rec_daddr = XFS_FSB_TO_BB(mp, rtbno);
        irec.rm_startblock = rtbno;
 
-       rtbno = rec->ar_extcount * mp->m_sb.sb_rextsize;
+       rtbno = xfs_rtx_to_rtb(mp, rec->ar_extcount);
        len_daddr = XFS_FSB_TO_BB(mp, rtbno);
        irec.rm_blockcount = rtbno;
 
@@ -514,7 +514,7 @@ xfs_getfsmap_rtdev_rtbitmap(
        uint64_t                        eofs;
        int                             error;
 
-       eofs = XFS_FSB_TO_BB(mp, mp->m_sb.sb_rextents * mp->m_sb.sb_rextsize);
+       eofs = XFS_FSB_TO_BB(mp, xfs_rtx_to_rtb(mp, mp->m_sb.sb_rextents));
        if (keys[0].fmr_physical >= eofs)
                return 0;
        start_rtb = XFS_BB_TO_FSBT(mp,
index 819a3568b28f46fa9036d888ca0b8284d5f8fed0..991a31089dc7fc30512f80b330d9d07e9bbb58ef 100644 (file)
@@ -42,6 +42,7 @@
 #include "xfs_xattr.h"
 #include "xfs_iunlink_item.h"
 #include "xfs_dahash_test.h"
+#include "xfs_rtbitmap.h"
 #include "scrub/stats.h"
 
 #include <linux/magic.h>
@@ -890,7 +891,7 @@ xfs_fs_statfs(
 
                statp->f_blocks = sbp->sb_rblocks;
                freertx = percpu_counter_sum_positive(&mp->m_frextents);
-               statp->f_bavail = statp->f_bfree = freertx * sbp->sb_rextsize;
+               statp->f_bavail = statp->f_bfree = xfs_rtx_to_rtb(mp, freertx);
        }
 
        return 0;