xfs: convert xfs_extlen_t to xfs_rtxlen_t in the rt allocator
authorDarrick J. Wong <djwong@kernel.org>
Mon, 16 Oct 2023 16:31:11 +0000 (09:31 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 17 Oct 2023 23:24:22 +0000 (16:24 -0700)
In most of the filesystem, we use xfs_extlen_t to store the length of a
file (or AG) space mapping in units of fs blocks.  Unfortunately, the
realtime allocator also uses it to store the length of a rt space
mapping in units of rt extents.  This is confusing, since one rt extent
can consist of many fs blocks.

Separate the two by introducing a new type (xfs_rtxlen_t) to store the
length of a space mapping (in units of realtime extents) that would be
found in a file.

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/libxfs/xfs_types.h
fs/xfs/scrub/rtbitmap.c
fs/xfs/xfs_bmap_util.c
fs/xfs/xfs_rtalloc.c
fs/xfs/xfs_rtalloc.h

index 9eb1b5aa7e35a62273fd55f3ea8470849ef4a51a..d33c3e561077e43391c1974cd863e546604d9e19 100644 (file)
@@ -534,7 +534,7 @@ xfs_rtmodify_range(
        xfs_mount_t     *mp,            /* file system mount point */
        xfs_trans_t     *tp,            /* transaction pointer */
        xfs_rtblock_t   start,          /* starting block to modify */
-       xfs_extlen_t    len,            /* length of extent to modify */
+       xfs_rtxlen_t    len,            /* length of extent to modify */
        int             val)            /* 1 for free, 0 for allocated */
 {
        xfs_rtword_t    *b;             /* current word in buffer */
@@ -690,7 +690,7 @@ xfs_rtfree_range(
        xfs_mount_t     *mp,            /* file system mount point */
        xfs_trans_t     *tp,            /* transaction pointer */
        xfs_rtblock_t   start,          /* starting block to free */
-       xfs_extlen_t    len,            /* length to free */
+       xfs_rtxlen_t    len,            /* length to free */
        struct xfs_buf  **rbpp,         /* in/out: summary block buffer */
        xfs_fsblock_t   *rsb)           /* in/out: summary block number */
 {
@@ -766,7 +766,7 @@ xfs_rtcheck_range(
        xfs_mount_t     *mp,            /* file system mount point */
        xfs_trans_t     *tp,            /* transaction pointer */
        xfs_rtblock_t   start,          /* starting block number of extent */
-       xfs_extlen_t    len,            /* length of extent */
+       xfs_rtxlen_t    len,            /* length of extent */
        int             val,            /* 1 for free, 0 for allocated */
        xfs_rtblock_t   *new,           /* out: first block not matching */
        int             *stat)          /* out: 1 for matches, 0 for not */
@@ -942,7 +942,7 @@ xfs_rtcheck_alloc_range(
        xfs_mount_t     *mp,            /* file system mount point */
        xfs_trans_t     *tp,            /* transaction pointer */
        xfs_rtblock_t   bno,            /* starting block number of extent */
-       xfs_extlen_t    len)            /* length of extent */
+       xfs_rtxlen_t    len)            /* length of extent */
 {
        xfs_rtblock_t   new;            /* dummy for xfs_rtcheck_range */
        int             stat;
@@ -965,7 +965,7 @@ int                                 /* error */
 xfs_rtfree_extent(
        xfs_trans_t     *tp,            /* transaction pointer */
        xfs_rtblock_t   bno,            /* starting block number to free */
-       xfs_extlen_t    len)            /* length of extent freed */
+       xfs_rtxlen_t    len)            /* length of extent freed */
 {
        int             error;          /* error value */
        xfs_mount_t     *mp;            /* file system mount structure */
@@ -1116,7 +1116,7 @@ xfs_rtalloc_extent_is_free(
        struct xfs_mount                *mp,
        struct xfs_trans                *tp,
        xfs_rtblock_t                   start,
-       xfs_extlen_t                    len,
+       xfs_rtxlen_t                    len,
        bool                            *is_free)
 {
        xfs_rtblock_t                   end;
index 546dea34bb37c043b9bc3b7f16abde0ae2285209..d4449610154a8ef892cce084bf5f9f40217f2c23 100644 (file)
@@ -26,7 +26,7 @@ typedef int (*xfs_rtalloc_query_range_fn)(
 int xfs_rtbuf_get(struct xfs_mount *mp, struct xfs_trans *tp,
                  xfs_rtblock_t block, int issum, struct xfs_buf **bpp);
 int xfs_rtcheck_range(struct xfs_mount *mp, struct xfs_trans *tp,
-                     xfs_rtblock_t start, xfs_extlen_t len, int val,
+                     xfs_rtblock_t start, xfs_rtxlen_t len, int val,
                      xfs_rtblock_t *new, int *stat);
 int xfs_rtfind_back(struct xfs_mount *mp, struct xfs_trans *tp,
                    xfs_rtblock_t start, xfs_rtblock_t limit,
@@ -35,7 +35,7 @@ int xfs_rtfind_forw(struct xfs_mount *mp, struct xfs_trans *tp,
                    xfs_rtblock_t start, xfs_rtblock_t limit,
                    xfs_rtblock_t *rtblock);
 int xfs_rtmodify_range(struct xfs_mount *mp, struct xfs_trans *tp,
-                      xfs_rtblock_t start, xfs_extlen_t len, int val);
+                      xfs_rtblock_t start, xfs_rtxlen_t len, int val);
 int xfs_rtmodify_summary_int(struct xfs_mount *mp, struct xfs_trans *tp,
                             int log, xfs_rtblock_t bbno, int delta,
                             struct xfs_buf **rbpp, xfs_fsblock_t *rsb,
@@ -44,7 +44,7 @@ int xfs_rtmodify_summary(struct xfs_mount *mp, struct xfs_trans *tp, int log,
                         xfs_rtblock_t bbno, int delta, struct xfs_buf **rbpp,
                         xfs_fsblock_t *rsb);
 int xfs_rtfree_range(struct xfs_mount *mp, struct xfs_trans *tp,
-                    xfs_rtblock_t start, xfs_extlen_t len,
+                    xfs_rtblock_t start, xfs_rtxlen_t len,
                     struct xfs_buf **rbpp, xfs_fsblock_t *rsb);
 int xfs_rtalloc_query_range(struct xfs_mount *mp, struct xfs_trans *tp,
                const struct xfs_rtalloc_rec *low_rec,
@@ -53,9 +53,8 @@ int xfs_rtalloc_query_range(struct xfs_mount *mp, struct xfs_trans *tp,
 int xfs_rtalloc_query_all(struct xfs_mount *mp, struct xfs_trans *tp,
                          xfs_rtalloc_query_range_fn fn,
                          void *priv);
-bool xfs_verify_rtbno(struct xfs_mount *mp, xfs_rtblock_t rtbno);
 int xfs_rtalloc_extent_is_free(struct xfs_mount *mp, struct xfs_trans *tp,
-                              xfs_rtblock_t start, xfs_extlen_t len,
+                              xfs_rtblock_t start, xfs_rtxlen_t len,
                               bool *is_free);
 /*
  * Free an extent in the realtime subvolume.  Length is expressed in
@@ -65,7 +64,7 @@ int                                   /* error */
 xfs_rtfree_extent(
        struct xfs_trans        *tp,    /* transaction pointer */
        xfs_rtblock_t           bno,    /* starting block number to free */
-       xfs_extlen_t            len);   /* length of extent freed */
+       xfs_rtxlen_t            len);   /* length of extent freed */
 
 /* Same as above, but in units of rt blocks. */
 int xfs_rtfree_blocks(struct xfs_trans *tp, xfs_fsblock_t rtbno,
index 851220021484177e969ec4b08ae96582d708abcc..713cb70311efaf839ae9df87c0c2e2b89edd50df 100644 (file)
@@ -11,6 +11,7 @@ typedef uint32_t      prid_t;         /* project ID */
 typedef uint32_t       xfs_agblock_t;  /* blockno in alloc. group */
 typedef uint32_t       xfs_agino_t;    /* inode # within allocation grp */
 typedef uint32_t       xfs_extlen_t;   /* extent length in blocks */
+typedef uint32_t       xfs_rtxlen_t;   /* file extent length in rtextents */
 typedef uint32_t       xfs_agnumber_t; /* allocation group number */
 typedef uint64_t       xfs_extnum_t;   /* # of extents in a file */
 typedef uint32_t       xfs_aextnum_t;  /* # extents in an attribute fork */
index 2e5fd52f7af3ab1f93c5f3926612b6aad17b87f4..71d3e8b858446985cd96361369645a5056ae1846 100644 (file)
@@ -133,7 +133,7 @@ xchk_xref_is_used_rt_space(
 {
        xfs_rtblock_t           startext;
        xfs_rtblock_t           endext;
-       xfs_rtblock_t           extcount;
+       xfs_rtxlen_t            extcount;
        bool                    is_free;
        int                     error;
 
index fcefab68728598b9cb3f011d27fa240bd794bbf7..574665ca8feaf94cbc97bddfe52d40669c985e22 100644 (file)
@@ -76,13 +76,13 @@ xfs_bmap_rtalloc(
        struct xfs_mount        *mp = ap->ip->i_mount;
        xfs_fileoff_t           orig_offset = ap->offset;
        xfs_rtblock_t           rtb;
-       xfs_extlen_t            prod = 0;  /* product factor for allocators */
+       xfs_rtxlen_t            prod = 0;  /* product factor for allocators */
        xfs_extlen_t            mod = 0;   /* product factor for allocators */
-       xfs_extlen_t            ralen = 0; /* realtime allocation length */
+       xfs_rtxlen_t            ralen = 0; /* realtime allocation length */
        xfs_extlen_t            align;     /* minimum allocation alignment */
        xfs_extlen_t            orig_length = ap->length;
        xfs_extlen_t            minlen = mp->m_sb.sb_rextsize;
-       xfs_extlen_t            raminlen;
+       xfs_rtxlen_t            raminlen;
        bool                    rtlocked = false;
        bool                    ignore_locality = false;
        int                     error;
index f2eb0c8b595db4fd08af08c54ba5f677c2f2c6e5..1789ae818662e5b43f1202bf25cc6b9ad24ef239 100644 (file)
@@ -144,7 +144,7 @@ xfs_rtallocate_range(
        xfs_mount_t     *mp,            /* file system mount point */
        xfs_trans_t     *tp,            /* transaction pointer */
        xfs_rtblock_t   start,          /* start block to allocate */
-       xfs_extlen_t    len,            /* length to allocate */
+       xfs_rtxlen_t    len,            /* length to allocate */
        struct xfs_buf  **rbpp,         /* in/out: summary block buffer */
        xfs_fsblock_t   *rsb)           /* in/out: summary block number */
 {
@@ -216,14 +216,14 @@ xfs_rtallocate_range(
  * Make sure we don't run off the end of the rt volume.  Be careful that
  * adjusting maxlen downwards doesn't cause us to fail the alignment checks.
  */
-static inline xfs_extlen_t
+static inline xfs_rtxlen_t
 xfs_rtallocate_clamp_len(
        struct xfs_mount        *mp,
        xfs_rtblock_t           startrtx,
-       xfs_extlen_t            rtxlen,
-       xfs_extlen_t            prod)
+       xfs_rtxlen_t            rtxlen,
+       xfs_rtxlen_t            prod)
 {
-       xfs_extlen_t            ret;
+       xfs_rtxlen_t            ret;
 
        ret = min(mp->m_sb.sb_rextents, startrtx + rtxlen) - startrtx;
        return rounddown(ret, prod);
@@ -240,13 +240,13 @@ xfs_rtallocate_extent_block(
        xfs_mount_t     *mp,            /* file system mount point */
        xfs_trans_t     *tp,            /* transaction pointer */
        xfs_rtblock_t   bbno,           /* bitmap block number */
-       xfs_extlen_t    minlen,         /* minimum length to allocate */
-       xfs_extlen_t    maxlen,         /* maximum length to allocate */
-       xfs_extlen_t    *len,           /* out: actual length allocated */
+       xfs_rtxlen_t    minlen,         /* minimum length to allocate */
+       xfs_rtxlen_t    maxlen,         /* maximum length to allocate */
+       xfs_rtxlen_t    *len,           /* out: actual length allocated */
        xfs_rtblock_t   *nextp,         /* out: next block to try */
        struct xfs_buf  **rbpp,         /* in/out: summary block buffer */
        xfs_fsblock_t   *rsb,           /* in/out: summary block number */
-       xfs_extlen_t    prod,           /* extent product factor */
+       xfs_rtxlen_t    prod,           /* extent product factor */
        xfs_rtblock_t   *rtblock)       /* out: start block allocated */
 {
        xfs_rtblock_t   besti;          /* best rtblock found so far */
@@ -319,7 +319,7 @@ xfs_rtallocate_extent_block(
         * Searched the whole thing & didn't find a maxlen free extent.
         */
        if (minlen < maxlen && besti != -1) {
-               xfs_extlen_t    p;      /* amount to trim length by */
+               xfs_rtxlen_t    p;      /* amount to trim length by */
 
                /*
                 * If size should be a multiple of prod, make that so.
@@ -360,16 +360,16 @@ xfs_rtallocate_extent_exact(
        xfs_mount_t     *mp,            /* file system mount point */
        xfs_trans_t     *tp,            /* transaction pointer */
        xfs_rtblock_t   bno,            /* starting block number to allocate */
-       xfs_extlen_t    minlen,         /* minimum length to allocate */
-       xfs_extlen_t    maxlen,         /* maximum length to allocate */
-       xfs_extlen_t    *len,           /* out: actual length allocated */
+       xfs_rtxlen_t    minlen,         /* minimum length to allocate */
+       xfs_rtxlen_t    maxlen,         /* maximum length to allocate */
+       xfs_rtxlen_t    *len,           /* out: actual length allocated */
        struct xfs_buf  **rbpp,         /* in/out: summary block buffer */
        xfs_fsblock_t   *rsb,           /* in/out: summary block number */
-       xfs_extlen_t    prod,           /* extent product factor */
+       xfs_rtxlen_t    prod,           /* extent product factor */
        xfs_rtblock_t   *rtblock)       /* out: start block allocated */
 {
        int             error;          /* error value */
-       xfs_extlen_t    i;              /* extent length trimmed due to prod */
+       xfs_rtxlen_t    i;              /* extent length trimmed due to prod */
        int             isfree;         /* extent is free */
        xfs_rtblock_t   next;           /* next block to try (dummy) */
 
@@ -440,12 +440,12 @@ xfs_rtallocate_extent_near(
        xfs_mount_t     *mp,            /* file system mount point */
        xfs_trans_t     *tp,            /* transaction pointer */
        xfs_rtblock_t   bno,            /* starting block number to allocate */
-       xfs_extlen_t    minlen,         /* minimum length to allocate */
-       xfs_extlen_t    maxlen,         /* maximum length to allocate */
-       xfs_extlen_t    *len,           /* out: actual length allocated */
+       xfs_rtxlen_t    minlen,         /* minimum length to allocate */
+       xfs_rtxlen_t    maxlen,         /* maximum length to allocate */
+       xfs_rtxlen_t    *len,           /* out: actual length allocated */
        struct xfs_buf  **rbpp,         /* in/out: summary block buffer */
        xfs_fsblock_t   *rsb,           /* in/out: summary block number */
-       xfs_extlen_t    prod,           /* extent product factor */
+       xfs_rtxlen_t    prod,           /* extent product factor */
        xfs_rtblock_t   *rtblock)       /* out: start block allocated */
 {
        int             any;            /* any useful extents from summary */
@@ -644,12 +644,12 @@ STATIC int                                /* error */
 xfs_rtallocate_extent_size(
        xfs_mount_t     *mp,            /* file system mount point */
        xfs_trans_t     *tp,            /* transaction pointer */
-       xfs_extlen_t    minlen,         /* minimum length to allocate */
-       xfs_extlen_t    maxlen,         /* maximum length to allocate */
-       xfs_extlen_t    *len,           /* out: actual length allocated */
+       xfs_rtxlen_t    minlen,         /* minimum length to allocate */
+       xfs_rtxlen_t    maxlen,         /* maximum length to allocate */
+       xfs_rtxlen_t    *len,           /* out: actual length allocated */
        struct xfs_buf  **rbpp,         /* in/out: summary block buffer */
        xfs_fsblock_t   *rsb,           /* in/out: summary block number */
-       xfs_extlen_t    prod,           /* extent product factor */
+       xfs_rtxlen_t    prod,           /* extent product factor */
        xfs_rtblock_t   *rtblock)       /* out: start block allocated */
 {
        int             error;          /* error value */
@@ -1197,11 +1197,11 @@ int                                     /* error */
 xfs_rtallocate_extent(
        xfs_trans_t     *tp,            /* transaction pointer */
        xfs_rtblock_t   bno,            /* starting block number to allocate */
-       xfs_extlen_t    minlen,         /* minimum length to allocate */
-       xfs_extlen_t    maxlen,         /* maximum length to allocate */
-       xfs_extlen_t    *len,           /* out: actual length allocated */
+       xfs_rtxlen_t    minlen,         /* minimum length to allocate */
+       xfs_rtxlen_t    maxlen,         /* maximum length to allocate */
+       xfs_rtxlen_t    *len,           /* out: actual length allocated */
        int             wasdel,         /* was a delayed allocation extent */
-       xfs_extlen_t    prod,           /* extent product factor */
+       xfs_rtxlen_t    prod,           /* extent product factor */
        xfs_rtblock_t   *rtblock)       /* out: start block allocated */
 {
        xfs_mount_t     *mp = tp->t_mountp;
@@ -1217,7 +1217,7 @@ xfs_rtallocate_extent(
         * If prod is set then figure out what to do to minlen and maxlen.
         */
        if (prod > 1) {
-               xfs_extlen_t    i;
+               xfs_rtxlen_t    i;
 
                if ((i = maxlen % prod))
                        maxlen -= i;
@@ -1444,7 +1444,7 @@ int                                       /* error */
 xfs_rtpick_extent(
        xfs_mount_t     *mp,            /* file system mount point */
        xfs_trans_t     *tp,            /* transaction pointer */
-       xfs_extlen_t    len,            /* allocation length (rtextents) */
+       xfs_rtxlen_t    len,            /* allocation length (rtextents) */
        xfs_rtblock_t   *pick)          /* result rt extent */
 {
        xfs_rtblock_t   b;              /* result block */
index 11859c259a1c43c44db0e8c07d6a68ed506dda04..24a4a1321de00892397250caaa2354f805ff6685 100644 (file)
@@ -25,11 +25,11 @@ int                                 /* error */
 xfs_rtallocate_extent(
        struct xfs_trans        *tp,    /* transaction pointer */
        xfs_rtblock_t           bno,    /* starting block number to allocate */
-       xfs_extlen_t            minlen, /* minimum length to allocate */
-       xfs_extlen_t            maxlen, /* maximum length to allocate */
-       xfs_extlen_t            *len,   /* out: actual length allocated */
+       xfs_rtxlen_t            minlen, /* minimum length to allocate */
+       xfs_rtxlen_t            maxlen, /* maximum length to allocate */
+       xfs_rtxlen_t            *len,   /* out: actual length allocated */
        int                     wasdel, /* was a delayed allocation extent */
-       xfs_extlen_t            prod,   /* extent product factor */
+       xfs_rtxlen_t            prod,   /* extent product factor */
        xfs_rtblock_t           *rtblock); /* out: start block allocated */
 
 
@@ -62,7 +62,7 @@ int                                   /* error */
 xfs_rtpick_extent(
        struct xfs_mount        *mp,    /* file system mount point */
        struct xfs_trans        *tp,    /* transaction pointer */
-       xfs_extlen_t            len,    /* allocation length (rtextents) */
+       xfs_rtxlen_t            len,    /* allocation length (rtextents) */
        xfs_rtblock_t           *pick); /* result rt extent */
 
 /*