mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
xfs: convert xfs_extlen_t to xfs_rtxlen_t in the rt allocator
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>
This commit is contained in:
parent
13928113fc
commit
a684c538bc
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
@ -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 */
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user