From: "Darrick J. Wong" <djwong@kernel.org>
To: Chandan Babu R <chandan.babu@oracle.com>
Cc: linux-xfs@vger.kernel.org, david@fromorbit.com
Subject: Re: [PATCH V5 16/16] xfs: Define max extent length based on on-disk format definition
Date: Tue, 1 Feb 2022 11:26:42 -0800 [thread overview]
Message-ID: <20220201192642.GL8313@magnolia> (raw)
In-Reply-To: <20220121051857.221105-17-chandan.babu@oracle.com>
On Fri, Jan 21, 2022 at 10:48:57AM +0530, Chandan Babu R wrote:
> The maximum extent length depends on maximum block count that can be stored in
> a BMBT record. Hence this commit defines MAXEXTLEN based on
> BMBT_BLOCKCOUNT_BITLEN.
>
> While at it, the commit also renames MAXEXTLEN to XFS_MAX_BMBT_EXTLEN.
>
> Suggested-by: Darrick J. Wong <djwong@kernel.org>
> Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
Looks good now,
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
--D
> ---
> fs/xfs/libxfs/xfs_alloc.c | 2 +-
> fs/xfs/libxfs/xfs_bmap.c | 57 +++++++++++++++++-----------------
> fs/xfs/libxfs/xfs_format.h | 5 +--
> fs/xfs/libxfs/xfs_inode_buf.c | 4 +--
> fs/xfs/libxfs/xfs_trans_resv.c | 11 ++++---
> fs/xfs/scrub/bmap.c | 2 +-
> fs/xfs/xfs_bmap_util.c | 14 +++++----
> fs/xfs/xfs_iomap.c | 28 ++++++++---------
> 8 files changed, 64 insertions(+), 59 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c
> index 353e53b892e6..3f9b9cbfef43 100644
> --- a/fs/xfs/libxfs/xfs_alloc.c
> +++ b/fs/xfs/libxfs/xfs_alloc.c
> @@ -2493,7 +2493,7 @@ __xfs_free_extent_later(
>
> ASSERT(bno != NULLFSBLOCK);
> ASSERT(len > 0);
> - ASSERT(len <= MAXEXTLEN);
> + ASSERT(len <= XFS_MAX_BMBT_EXTLEN);
> ASSERT(!isnullstartblock(bno));
> agno = XFS_FSB_TO_AGNO(mp, bno);
> agbno = XFS_FSB_TO_AGBNO(mp, bno);
> diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
> index 384532aac60a..1c3da6aac2f9 100644
> --- a/fs/xfs/libxfs/xfs_bmap.c
> +++ b/fs/xfs/libxfs/xfs_bmap.c
> @@ -1449,7 +1449,7 @@ xfs_bmap_add_extent_delay_real(
> LEFT.br_startoff + LEFT.br_blockcount == new->br_startoff &&
> LEFT.br_startblock + LEFT.br_blockcount == new->br_startblock &&
> LEFT.br_state == new->br_state &&
> - LEFT.br_blockcount + new->br_blockcount <= MAXEXTLEN)
> + LEFT.br_blockcount + new->br_blockcount <= XFS_MAX_BMBT_EXTLEN)
> state |= BMAP_LEFT_CONTIG;
>
> /*
> @@ -1467,13 +1467,13 @@ xfs_bmap_add_extent_delay_real(
> new_endoff == RIGHT.br_startoff &&
> new->br_startblock + new->br_blockcount == RIGHT.br_startblock &&
> new->br_state == RIGHT.br_state &&
> - new->br_blockcount + RIGHT.br_blockcount <= MAXEXTLEN &&
> + new->br_blockcount + RIGHT.br_blockcount <= XFS_MAX_BMBT_EXTLEN &&
> ((state & (BMAP_LEFT_CONTIG | BMAP_LEFT_FILLING |
> BMAP_RIGHT_FILLING)) !=
> (BMAP_LEFT_CONTIG | BMAP_LEFT_FILLING |
> BMAP_RIGHT_FILLING) ||
> LEFT.br_blockcount + new->br_blockcount + RIGHT.br_blockcount
> - <= MAXEXTLEN))
> + <= XFS_MAX_BMBT_EXTLEN))
> state |= BMAP_RIGHT_CONTIG;
>
> error = 0;
> @@ -1997,7 +1997,7 @@ xfs_bmap_add_extent_unwritten_real(
> LEFT.br_startoff + LEFT.br_blockcount == new->br_startoff &&
> LEFT.br_startblock + LEFT.br_blockcount == new->br_startblock &&
> LEFT.br_state == new->br_state &&
> - LEFT.br_blockcount + new->br_blockcount <= MAXEXTLEN)
> + LEFT.br_blockcount + new->br_blockcount <= XFS_MAX_BMBT_EXTLEN)
> state |= BMAP_LEFT_CONTIG;
>
> /*
> @@ -2015,13 +2015,13 @@ xfs_bmap_add_extent_unwritten_real(
> new_endoff == RIGHT.br_startoff &&
> new->br_startblock + new->br_blockcount == RIGHT.br_startblock &&
> new->br_state == RIGHT.br_state &&
> - new->br_blockcount + RIGHT.br_blockcount <= MAXEXTLEN &&
> + new->br_blockcount + RIGHT.br_blockcount <= XFS_MAX_BMBT_EXTLEN &&
> ((state & (BMAP_LEFT_CONTIG | BMAP_LEFT_FILLING |
> BMAP_RIGHT_FILLING)) !=
> (BMAP_LEFT_CONTIG | BMAP_LEFT_FILLING |
> BMAP_RIGHT_FILLING) ||
> LEFT.br_blockcount + new->br_blockcount + RIGHT.br_blockcount
> - <= MAXEXTLEN))
> + <= XFS_MAX_BMBT_EXTLEN))
> state |= BMAP_RIGHT_CONTIG;
>
> /*
> @@ -2507,15 +2507,15 @@ xfs_bmap_add_extent_hole_delay(
> */
> if ((state & BMAP_LEFT_VALID) && (state & BMAP_LEFT_DELAY) &&
> left.br_startoff + left.br_blockcount == new->br_startoff &&
> - left.br_blockcount + new->br_blockcount <= MAXEXTLEN)
> + left.br_blockcount + new->br_blockcount <= XFS_MAX_BMBT_EXTLEN)
> state |= BMAP_LEFT_CONTIG;
>
> if ((state & BMAP_RIGHT_VALID) && (state & BMAP_RIGHT_DELAY) &&
> new->br_startoff + new->br_blockcount == right.br_startoff &&
> - new->br_blockcount + right.br_blockcount <= MAXEXTLEN &&
> + new->br_blockcount + right.br_blockcount <= XFS_MAX_BMBT_EXTLEN &&
> (!(state & BMAP_LEFT_CONTIG) ||
> (left.br_blockcount + new->br_blockcount +
> - right.br_blockcount <= MAXEXTLEN)))
> + right.br_blockcount <= XFS_MAX_BMBT_EXTLEN)))
> state |= BMAP_RIGHT_CONTIG;
>
> /*
> @@ -2658,17 +2658,17 @@ xfs_bmap_add_extent_hole_real(
> left.br_startoff + left.br_blockcount == new->br_startoff &&
> left.br_startblock + left.br_blockcount == new->br_startblock &&
> left.br_state == new->br_state &&
> - left.br_blockcount + new->br_blockcount <= MAXEXTLEN)
> + left.br_blockcount + new->br_blockcount <= XFS_MAX_BMBT_EXTLEN)
> state |= BMAP_LEFT_CONTIG;
>
> if ((state & BMAP_RIGHT_VALID) && !(state & BMAP_RIGHT_DELAY) &&
> new->br_startoff + new->br_blockcount == right.br_startoff &&
> new->br_startblock + new->br_blockcount == right.br_startblock &&
> new->br_state == right.br_state &&
> - new->br_blockcount + right.br_blockcount <= MAXEXTLEN &&
> + new->br_blockcount + right.br_blockcount <= XFS_MAX_BMBT_EXTLEN &&
> (!(state & BMAP_LEFT_CONTIG) ||
> left.br_blockcount + new->br_blockcount +
> - right.br_blockcount <= MAXEXTLEN))
> + right.br_blockcount <= XFS_MAX_BMBT_EXTLEN))
> state |= BMAP_RIGHT_CONTIG;
>
> error = 0;
> @@ -2903,15 +2903,15 @@ xfs_bmap_extsize_align(
>
> /*
> * For large extent hint sizes, the aligned extent might be larger than
> - * MAXEXTLEN. In that case, reduce the size by an extsz so that it pulls
> - * the length back under MAXEXTLEN. The outer allocation loops handle
> - * short allocation just fine, so it is safe to do this. We only want to
> - * do it when we are forced to, though, because it means more allocation
> - * operations are required.
> + * XFS_BMBT_MAX_EXTLEN. In that case, reduce the size by an extsz so
> + * that it pulls the length back under XFS_BMBT_MAX_EXTLEN. The outer
> + * allocation loops handle short allocation just fine, so it is safe to
> + * do this. We only want to do it when we are forced to, though, because
> + * it means more allocation operations are required.
> */
> - while (align_alen > MAXEXTLEN)
> + while (align_alen > XFS_MAX_BMBT_EXTLEN)
> align_alen -= extsz;
> - ASSERT(align_alen <= MAXEXTLEN);
> + ASSERT(align_alen <= XFS_MAX_BMBT_EXTLEN);
>
> /*
> * If the previous block overlaps with this proposed allocation
> @@ -3001,9 +3001,9 @@ xfs_bmap_extsize_align(
> return -EINVAL;
> } else {
> ASSERT(orig_off >= align_off);
> - /* see MAXEXTLEN handling above */
> + /* see XFS_BMBT_MAX_EXTLEN handling above */
> ASSERT(orig_end <= align_off + align_alen ||
> - align_alen + extsz > MAXEXTLEN);
> + align_alen + extsz > XFS_MAX_BMBT_EXTLEN);
> }
>
> #ifdef DEBUG
> @@ -3968,7 +3968,7 @@ xfs_bmapi_reserve_delalloc(
> * Cap the alloc length. Keep track of prealloc so we know whether to
> * tag the inode before we return.
> */
> - alen = XFS_FILBLKS_MIN(len + prealloc, MAXEXTLEN);
> + alen = XFS_FILBLKS_MIN(len + prealloc, XFS_MAX_BMBT_EXTLEN);
> if (!eof)
> alen = XFS_FILBLKS_MIN(alen, got->br_startoff - aoff);
> if (prealloc && alen >= len)
> @@ -4101,7 +4101,7 @@ xfs_bmapi_allocate(
> if (!xfs_iext_peek_prev_extent(ifp, &bma->icur, &bma->prev))
> bma->prev.br_startoff = NULLFILEOFF;
> } else {
> - bma->length = XFS_FILBLKS_MIN(bma->length, MAXEXTLEN);
> + bma->length = XFS_FILBLKS_MIN(bma->length, XFS_MAX_BMBT_EXTLEN);
> if (!bma->eof)
> bma->length = XFS_FILBLKS_MIN(bma->length,
> bma->got.br_startoff - bma->offset);
> @@ -4421,8 +4421,8 @@ xfs_bmapi_write(
> * xfs_extlen_t and therefore 32 bits. Hence we have to
> * check for 32-bit overflows and handle them here.
> */
> - if (len > (xfs_filblks_t)MAXEXTLEN)
> - bma.length = MAXEXTLEN;
> + if (len > (xfs_filblks_t)XFS_MAX_BMBT_EXTLEN)
> + bma.length = XFS_MAX_BMBT_EXTLEN;
> else
> bma.length = len;
>
> @@ -4557,7 +4557,8 @@ xfs_bmapi_convert_delalloc(
> bma.ip = ip;
> bma.wasdel = true;
> bma.offset = bma.got.br_startoff;
> - bma.length = max_t(xfs_filblks_t, bma.got.br_blockcount, MAXEXTLEN);
> + bma.length = max_t(xfs_filblks_t, bma.got.br_blockcount,
> + XFS_MAX_BMBT_EXTLEN);
> bma.minleft = xfs_bmapi_minleft(tp, ip, whichfork);
>
> /*
> @@ -4638,7 +4639,7 @@ xfs_bmapi_remap(
>
> ifp = XFS_IFORK_PTR(ip, whichfork);
> ASSERT(len > 0);
> - ASSERT(len <= (xfs_filblks_t)MAXEXTLEN);
> + ASSERT(len <= (xfs_filblks_t)XFS_MAX_BMBT_EXTLEN);
> ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL));
> ASSERT(!(flags & ~(XFS_BMAPI_ATTRFORK | XFS_BMAPI_PREALLOC |
> XFS_BMAPI_NORMAP)));
> @@ -5638,7 +5639,7 @@ xfs_bmse_can_merge(
> if ((left->br_startoff + left->br_blockcount != startoff) ||
> (left->br_startblock + left->br_blockcount != got->br_startblock) ||
> (left->br_state != got->br_state) ||
> - (left->br_blockcount + got->br_blockcount > MAXEXTLEN))
> + (left->br_blockcount + got->br_blockcount > XFS_MAX_BMBT_EXTLEN))
> return false;
>
> return true;
> diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h
> index b7521c1d1db2..fa11e4c1cc41 100644
> --- a/fs/xfs/libxfs/xfs_format.h
> +++ b/fs/xfs/libxfs/xfs_format.h
> @@ -886,7 +886,7 @@ enum xfs_dinode_fmt {
> { XFS_DINODE_FMT_UUID, "uuid" }
>
> /*
> - * Max values for extlen, extnum, aextnum.
> + * Max values for ondisk inode's extent counters.
> *
> * The newly introduced data fork extent counter is a 64-bit field. However, the
> * maximum number of extents in a file is limited to 2^54 extents (assuming one
> @@ -898,7 +898,6 @@ enum xfs_dinode_fmt {
> * Rounding up 47 to the nearest multiple of bits-per-byte results in 48. Hence
> * 2^48 was chosen as the maximum data fork extent count.
> */
> -#define MAXEXTLEN ((xfs_extlen_t)((1ULL << 21) - 1)) /* 21 bits */
> #define XFS_MAX_EXTCNT_DATA_FORK ((xfs_extnum_t)((1ULL << 48) - 1)) /* Unsigned 48-bits */
> #define XFS_MAX_EXTCNT_ATTR_FORK ((xfs_extnum_t)((1ULL << 32) - 1)) /* Unsigned 32-bits */
> #define XFS_MAX_EXTCNT_DATA_FORK_OLD ((xfs_extnum_t)((1ULL << 31) - 1)) /* Signed 32-bits */
> @@ -1635,6 +1634,8 @@ typedef struct xfs_bmdr_block {
> #define BMBT_STARTOFF_MASK ((1ULL << BMBT_STARTOFF_BITLEN) - 1)
> #define BMBT_BLOCKCOUNT_MASK ((1ULL << BMBT_BLOCKCOUNT_BITLEN) - 1)
>
> +#define XFS_MAX_BMBT_EXTLEN ((xfs_extlen_t)(BMBT_BLOCKCOUNT_MASK))
> +
> /*
> * bmbt records have a file offset (block) field that is 54 bits wide, so this
> * is the largest xfs_fileoff_t that we ever expect to see.
> diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c
> index 767189c7c887..409be63fd80d 100644
> --- a/fs/xfs/libxfs/xfs_inode_buf.c
> +++ b/fs/xfs/libxfs/xfs_inode_buf.c
> @@ -691,7 +691,7 @@ xfs_inode_validate_extsize(
> if (extsize_bytes % blocksize_bytes)
> return __this_address;
>
> - if (extsize > MAXEXTLEN)
> + if (extsize > XFS_MAX_BMBT_EXTLEN)
> return __this_address;
>
> if (!rt_flag && extsize > mp->m_sb.sb_agblocks / 2)
> @@ -748,7 +748,7 @@ xfs_inode_validate_cowextsize(
> if (cowextsize_bytes % mp->m_sb.sb_blocksize)
> return __this_address;
>
> - if (cowextsize > MAXEXTLEN)
> + if (cowextsize > XFS_MAX_BMBT_EXTLEN)
> return __this_address;
>
> if (cowextsize > mp->m_sb.sb_agblocks / 2)
> diff --git a/fs/xfs/libxfs/xfs_trans_resv.c b/fs/xfs/libxfs/xfs_trans_resv.c
> index 6f83d9b306ee..19313021fb99 100644
> --- a/fs/xfs/libxfs/xfs_trans_resv.c
> +++ b/fs/xfs/libxfs/xfs_trans_resv.c
> @@ -199,8 +199,8 @@ xfs_calc_inode_chunk_res(
> /*
> * Per-extent log reservation for the btree changes involved in freeing or
> * allocating a realtime extent. We have to be able to log as many rtbitmap
> - * blocks as needed to mark inuse MAXEXTLEN blocks' worth of realtime extents,
> - * as well as the realtime summary block.
> + * blocks as needed to mark inuse XFS_BMBT_MAX_EXTLEN blocks' worth of realtime
> + * extents, as well as the realtime summary block.
> */
> static unsigned int
> xfs_rtalloc_log_count(
> @@ -210,7 +210,7 @@ xfs_rtalloc_log_count(
> unsigned int blksz = XFS_FSB_TO_B(mp, 1);
> unsigned int rtbmp_bytes;
>
> - rtbmp_bytes = (MAXEXTLEN / mp->m_sb.sb_rextsize) / NBBY;
> + rtbmp_bytes = (XFS_MAX_BMBT_EXTLEN / mp->m_sb.sb_rextsize) / NBBY;
> return (howmany(rtbmp_bytes, blksz) + 1) * num_ops;
> }
>
> @@ -247,7 +247,7 @@ xfs_rtalloc_log_count(
> * the inode's bmap btree: max depth * block size
> * the agfs of the ags from which the extents are allocated: 2 * sector
> * the superblock free block counter: sector size
> - * the realtime bitmap: ((MAXEXTLEN / rtextsize) / NBBY) bytes
> + * the realtime bitmap: ((XFS_BMBT_MAX_EXTLEN / rtextsize) / NBBY) bytes
> * the realtime summary: 1 block
> * the allocation btrees: 2 trees * (2 * max depth - 1) * block size
> * And the bmap_finish transaction can free bmap blocks in a join (t3):
> @@ -299,7 +299,8 @@ xfs_calc_write_reservation(
> * the agf for each of the ags: 2 * sector size
> * the agfl for each of the ags: 2 * sector size
> * the super block to reflect the freed blocks: sector size
> - * the realtime bitmap: 2 exts * ((MAXEXTLEN / rtextsize) / NBBY) bytes
> + * the realtime bitmap: 2 exts * ((XFS_BMBT_MAX_EXTLEN / rtextsize) / NBBY)
> + * bytes
> * the realtime summary: 2 exts * 1 block
> * worst case split in allocation btrees per extent assuming 2 extents:
> * 2 exts * 2 trees * (2 * max depth - 1) * block size
> diff --git a/fs/xfs/scrub/bmap.c b/fs/xfs/scrub/bmap.c
> index a4cbbc346f60..c357593e0a02 100644
> --- a/fs/xfs/scrub/bmap.c
> +++ b/fs/xfs/scrub/bmap.c
> @@ -350,7 +350,7 @@ xchk_bmap_iextent(
> irec->br_startoff);
>
> /* Make sure the extent points to a valid place. */
> - if (irec->br_blockcount > MAXEXTLEN)
> + if (irec->br_blockcount > XFS_MAX_BMBT_EXTLEN)
> xchk_fblock_set_corrupt(info->sc, info->whichfork,
> irec->br_startoff);
> if (info->is_rt &&
> diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c
> index 73a36b7be3bd..36cde254dedd 100644
> --- a/fs/xfs/xfs_bmap_util.c
> +++ b/fs/xfs/xfs_bmap_util.c
> @@ -119,14 +119,14 @@ xfs_bmap_rtalloc(
> */
> ralen = ap->length / mp->m_sb.sb_rextsize;
> /*
> - * If the old value was close enough to MAXEXTLEN that
> + * 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
> - * MAXEXTLEN), we don't hear about that number, and can't
> + * 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 >= MAXEXTLEN)
> - ralen = MAXEXTLEN / mp->m_sb.sb_rextsize;
> + if (ralen * mp->m_sb.sb_rextsize >= XFS_MAX_BMBT_EXTLEN)
> + ralen = XFS_MAX_BMBT_EXTLEN / mp->m_sb.sb_rextsize;
>
> /*
> * Lock out modifications to both the RT bitmap and summary inodes
> @@ -840,9 +840,11 @@ xfs_alloc_file_space(
> * count, hence we need to limit the number of blocks we are
> * trying to reserve to avoid an overflow. We can't allocate
> * more than @nimaps extents, and an extent is limited on disk
> - * to MAXEXTLEN (21 bits), so use that to enforce the limit.
> + * to XFS_BMBT_MAX_EXTLEN (21 bits), so use that to enforce the
> + * limit.
> */
> - resblks = min_t(xfs_fileoff_t, (e - s), (MAXEXTLEN * nimaps));
> + resblks = min_t(xfs_fileoff_t, (e - s),
> + (XFS_MAX_BMBT_EXTLEN * nimaps));
> if (unlikely(rt)) {
> dblocks = XFS_DIOSTRAT_SPACE_RES(mp, 0);
> rblocks = resblks;
> diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c
> index 093758440ad5..6835adc8d62f 100644
> --- a/fs/xfs/xfs_iomap.c
> +++ b/fs/xfs/xfs_iomap.c
> @@ -395,7 +395,7 @@ xfs_iomap_prealloc_size(
> */
> plen = prev.br_blockcount;
> while (xfs_iext_prev_extent(ifp, &ncur, &got)) {
> - if (plen > MAXEXTLEN / 2 ||
> + if (plen > XFS_MAX_BMBT_EXTLEN / 2 ||
> isnullstartblock(got.br_startblock) ||
> got.br_startoff + got.br_blockcount != prev.br_startoff ||
> got.br_startblock + got.br_blockcount != prev.br_startblock)
> @@ -407,23 +407,23 @@ xfs_iomap_prealloc_size(
> /*
> * If the size of the extents is greater than half the maximum extent
> * length, then use the current offset as the basis. This ensures that
> - * for large files the preallocation size always extends to MAXEXTLEN
> - * rather than falling short due to things like stripe unit/width
> - * alignment of real extents.
> + * for large files the preallocation size always extends to
> + * XFS_BMBT_MAX_EXTLEN rather than falling short due to things like stripe
> + * unit/width alignment of real extents.
> */
> alloc_blocks = plen * 2;
> - if (alloc_blocks > MAXEXTLEN)
> + if (alloc_blocks > XFS_MAX_BMBT_EXTLEN)
> alloc_blocks = XFS_B_TO_FSB(mp, offset);
> qblocks = alloc_blocks;
>
> /*
> - * MAXEXTLEN is not a power of two value but we round the prealloc down
> - * to the nearest power of two value after throttling. To prevent the
> - * round down from unconditionally reducing the maximum supported
> - * prealloc size, we round up first, apply appropriate throttling,
> - * round down and cap the value to MAXEXTLEN.
> + * XFS_BMBT_MAX_EXTLEN is not a power of two value but we round the prealloc
> + * down to the nearest power of two value after throttling. To prevent
> + * the round down from unconditionally reducing the maximum supported
> + * prealloc size, we round up first, apply appropriate throttling, round
> + * down and cap the value to XFS_BMBT_MAX_EXTLEN.
> */
> - alloc_blocks = XFS_FILEOFF_MIN(roundup_pow_of_two(MAXEXTLEN),
> + alloc_blocks = XFS_FILEOFF_MIN(roundup_pow_of_two(XFS_MAX_BMBT_EXTLEN),
> alloc_blocks);
>
> freesp = percpu_counter_read_positive(&mp->m_fdblocks);
> @@ -471,14 +471,14 @@ xfs_iomap_prealloc_size(
> */
> if (alloc_blocks)
> alloc_blocks = rounddown_pow_of_two(alloc_blocks);
> - if (alloc_blocks > MAXEXTLEN)
> - alloc_blocks = MAXEXTLEN;
> + if (alloc_blocks > XFS_MAX_BMBT_EXTLEN)
> + alloc_blocks = XFS_MAX_BMBT_EXTLEN;
>
> /*
> * If we are still trying to allocate more space than is
> * available, squash the prealloc hard. This can happen if we
> * have a large file on a small filesystem and the above
> - * lowspace thresholds are smaller than MAXEXTLEN.
> + * lowspace thresholds are smaller than XFS_BMBT_MAX_EXTLEN.
> */
> while (alloc_blocks && alloc_blocks >= freesp)
> alloc_blocks >>= 4;
> --
> 2.30.2
>
prev parent reply other threads:[~2022-02-01 19:26 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-21 5:18 [PATCH V5 00/16] xfs: Extend per-inode extent counters Chandan Babu R
2022-01-21 5:18 ` [PATCH V5 01/16] xfs: Move extent count limits to xfs_format.h Chandan Babu R
2022-01-21 5:18 ` [PATCH V5 02/16] xfs: Introduce xfs_iext_max_nextents() helper Chandan Babu R
2022-01-21 5:18 ` [PATCH V5 03/16] xfs: Use xfs_extnum_t instead of basic data types Chandan Babu R
2022-01-21 5:18 ` [PATCH V5 04/16] xfs: Introduce xfs_dfork_nextents() helper Chandan Babu R
2022-01-21 5:18 ` [PATCH V5 05/16] xfs: Use basic types to define xfs_log_dinode's di_nextents and di_anextents Chandan Babu R
2022-01-21 5:18 ` [PATCH V5 06/16] xfs: Promote xfs_extnum_t and xfs_aextnum_t to 64 and 32-bits respectively Chandan Babu R
2022-01-25 0:32 ` Darrick J. Wong
2022-01-21 5:18 ` [PATCH V5 07/16] xfs: Introduce XFS_SB_FEAT_INCOMPAT_NREXT64 and associated per-fs feature bit Chandan Babu R
2022-01-21 5:18 ` [PATCH V5 08/16] xfs: Introduce XFS_FSOP_GEOM_FLAGS_NREXT64 Chandan Babu R
2022-01-21 5:18 ` [PATCH V5 09/16] xfs: Introduce XFS_DIFLAG2_NREXT64 and associated helpers Chandan Babu R
2022-01-21 5:18 ` [PATCH V5 10/16] xfs: Use xfs_rfsblock_t to count maximum blocks that can be used by BMBT Chandan Babu R
2022-01-25 0:31 ` Darrick J. Wong
2022-01-21 5:18 ` [PATCH V5 11/16] xfs: Introduce macros to represent new maximum extent counts for data/attr forks Chandan Babu R
2022-02-01 18:49 ` Darrick J. Wong
2022-01-21 5:18 ` [PATCH V5 12/16] xfs: Introduce per-inode 64-bit extent counters Chandan Babu R
2022-01-25 22:51 ` kernel test robot
2022-01-26 8:50 ` Chandan Babu R
2022-02-01 18:51 ` Darrick J. Wong
2022-02-01 19:10 ` Darrick J. Wong
2022-02-07 4:54 ` Chandan Babu R
2022-01-21 5:18 ` [PATCH V5 13/16] xfs: Conditionally upgrade existing inodes to use " Chandan Babu R
2022-02-01 20:01 ` Darrick J. Wong
2022-02-07 4:55 ` Chandan Babu R
2022-02-07 17:11 ` Darrick J. Wong
2022-02-11 12:10 ` Chandan Babu R
2022-02-14 17:07 ` Darrick J. Wong
2022-02-15 6:48 ` Chandan Babu R
2022-02-15 9:33 ` Dave Chinner
2022-02-15 11:33 ` Chandan Babu R
2022-02-15 13:16 ` Chandan Babu R
2022-02-16 1:16 ` Darrick J. Wong
2022-02-16 3:59 ` Dave Chinner
2022-02-16 12:34 ` Chandan Babu R
2022-01-21 5:18 ` [PATCH V5 14/16] xfs: Enable bulkstat ioctl to support 64-bit per-inode " Chandan Babu R
2022-02-01 19:24 ` Darrick J. Wong
2022-02-07 4:56 ` Chandan Babu R
2022-02-07 9:46 ` Chandan Babu R
2022-01-21 5:18 ` [PATCH V5 15/16] xfs: Add XFS_SB_FEAT_INCOMPAT_NREXT64 to the list of supported flags Chandan Babu R
2022-01-21 5:18 ` [PATCH V5 16/16] xfs: Define max extent length based on on-disk format definition Chandan Babu R
2022-02-01 19:26 ` Darrick J. Wong [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220201192642.GL8313@magnolia \
--to=djwong@kernel.org \
--cc=chandan.babu@oracle.com \
--cc=david@fromorbit.com \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).