]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
xfs: create a helper to convert extlen to rtextlen
authorDarrick J. Wong <djwong@kernel.org>
Mon, 16 Oct 2023 16:35:23 +0000 (09:35 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 17 Oct 2023 23:24:22 +0000 (16:24 -0700)
Create a helper to compute the realtime extent (xfs_rtxlen_t) from an
extent length (xfs_extlen_t) value.

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

index b6a4c46bddc0a4df32f682e676c33dd898440c4f..e2a36fc157c4c465f4e1609f620ba8dc4a12fbb1 100644 (file)
@@ -31,6 +31,14 @@ xfs_extlen_to_rtxmod(
        return len % mp->m_sb.sb_rextsize;
 }
 
+static inline xfs_rtxlen_t
+xfs_extlen_to_rtxlen(
+       struct xfs_mount        *mp,
+       xfs_extlen_t            len)
+{
+       return len / mp->m_sb.sb_rextsize;
+}
+
 /*
  * Functions for walking free space rtextents in the realtime bitmap.
  */
index 5b2f27cbdb8089d9386cf144288d960777f9d7de..4629f10d2f67ea4f80ba0dfc8f6e748ca1e2f71e 100644 (file)
@@ -19,6 +19,7 @@
 #include "xfs_trans.h"
 #include "xfs_qm.h"
 #include "xfs_trans_space.h"
+#include "xfs_rtbitmap.h"
 
 #define _ALLOC true
 #define _FREE  false
@@ -220,7 +221,7 @@ xfs_rtalloc_block_count(
        unsigned int            blksz = XFS_FSB_TO_B(mp, 1);
        unsigned int            rtbmp_bytes;
 
-       rtbmp_bytes = (XFS_MAX_BMBT_EXTLEN / mp->m_sb.sb_rextsize) / NBBY;
+       rtbmp_bytes = xfs_extlen_to_rtxlen(mp, XFS_MAX_BMBT_EXTLEN) / NBBY;
        return (howmany(rtbmp_bytes, blksz) + 1) * num_ops;
 }
 
index 8895184ff90a29066e5212509a1d63644c2333f7..4f53f784f06d774444e3188699caea7431bb6ff9 100644 (file)
@@ -90,7 +90,7 @@ xfs_bmap_rtalloc(
 
        align = xfs_get_extsz_hint(ap->ip);
 retry:
-       prod = align / mp->m_sb.sb_rextsize;
+       prod = xfs_extlen_to_rtxlen(mp, align);
        error = xfs_bmap_extsize_align(mp, &ap->got, &ap->prev,
                                        align, 1, ap->eof, 0,
                                        ap->conv, &ap->offset, &ap->length);
@@ -117,17 +117,14 @@ retry:
                prod = 1;
        /*
         * Set ralen to be the actual requested length in rtextents.
-        */
-       ralen = ap->length / mp->m_sb.sb_rextsize;
-       /*
+        *
         * If the old value was close enough to XFS_BMBT_MAX_EXTLEN that
         * we rounded up to it, cut it back so it's valid again.
         * Note that if it's a really large request (bigger than
         * XFS_BMBT_MAX_EXTLEN), we don't hear about that number, and can't
         * adjust the starting point to match it.
         */
-       if (xfs_rtxlen_to_extlen(mp, ralen) >= XFS_MAX_BMBT_EXTLEN)
-               ralen = XFS_MAX_BMBT_EXTLEN / mp->m_sb.sb_rextsize;
+       ralen = xfs_extlen_to_rtxlen(mp, min(ap->length, XFS_MAX_BMBT_EXTLEN));
 
        /*
         * Lock out modifications to both the RT bitmap and summary inodes
@@ -164,7 +161,7 @@ retry:
                do_div(ap->blkno, mp->m_sb.sb_rextsize);
        rtx = ap->blkno;
        ap->length = ralen;
-       raminlen = max_t(xfs_extlen_t, 1, minlen / mp->m_sb.sb_rextsize);
+       raminlen = max_t(xfs_rtxlen_t, 1, xfs_extlen_to_rtxlen(mp, minlen));
        error = xfs_rtallocate_extent(ap->tp, ap->blkno, raminlen, ap->length,
                        &ralen, ap->wasdel, prod, &rtx);
        if (error)
index 8c0bfc9a33b116cd74606daa2d6de4fc8362f004..338dd37745077e99a630cbfbf4cb9f25931ab57b 100644 (file)
@@ -24,6 +24,7 @@
 #include "xfs_dquot_item.h"
 #include "xfs_dquot.h"
 #include "xfs_icache.h"
+#include "xfs_rtbitmap.h"
 
 struct kmem_cache      *xfs_trans_cache;
 
@@ -1196,7 +1197,7 @@ xfs_trans_alloc_inode(
 
 retry:
        error = xfs_trans_alloc(mp, resv, dblocks,
-                       rblocks / mp->m_sb.sb_rextsize,
+                       xfs_extlen_to_rtxlen(mp, rblocks),
                        force ? XFS_TRANS_RESERVE : 0, &tp);
        if (error)
                return error;