Re: [PATCH 3/6] xfs: return maximum free size from xfs_rtany_summary()

Darrick J. Wong
2023-07-12T22:44:44Z

On Tue, Jun 20, 2023 at 02:32:13PM -0700, Omar Sandoval wrote:
> From: Omar Sandoval <osandov@fb.com>
>
> Instead of only returning whether there is any free space, return the
> maximum size, which is fast thanks to the previous commit. This will be
> used by two upcoming optimizations.
>
> Signed-off-by: Omar Sandoval <osandov@fb.com>

Assuming I understood the changes in the /last/ two patches, this seems
like a reasonable thing to pass upwards...

Reviewed-by: Darrick J. Wong <djwong@kernel.org>

--D

> ---
> fs/xfs/xfs_rtalloc.c | 18 +++++++++---------
> 1 file changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/fs/xfs/xfs_rtalloc.c b/fs/xfs/xfs_rtalloc.c
> index d3c76532d20e..ba7d42e0090f 100644
> --- a/fs/xfs/xfs_rtalloc.c
> +++ b/fs/xfs/xfs_rtalloc.c
> @@ -50,7 +50,7 @@ xfs_rtany_summary(
> int high, /* high log2 extent size */
> xfs_rtblock_t bbno, /* bitmap block number */
> struct xfs_rtbuf_cache *rtbufc, /* in/out: cache of realtime blocks */
> - int *stat) /* out: any good extents here? */
> + int *maxlog) /* out: maximum log2 extent size free */
> {
> int error; /* error value */
> int log; /* loop counter, log2 of ext. size */
> @@ -60,7 +60,7 @@ xfs_rtany_summary(
> if (mp->m_rsum_cache) {
> high = min(high, mp->m_rsum_cache[bbno] - 1);
> if (low > high) {
> - *stat = 0;
> + *maxlog = -1;
> return 0;
> }
> }
> @@ -80,14 +80,14 @@ xfs_rtany_summary(
> * If there are any, return success.
> */
> if (sum) {
> - *stat = 1;
> + *maxlog = log;
> goto out;
> }
> }
> /*
> * Found nothing, return failure.
> */
> - *stat = 0;
> + *maxlog = -1;
> out:
> /* There were no extents at levels > log. */
> if (mp->m_rsum_cache && log + 1 < mp->m_rsum_cache[bbno])
> @@ -427,7 +427,7 @@ xfs_rtallocate_extent_near(
> xfs_extlen_t prod, /* extent product factor */
> xfs_rtblock_t *rtblock) /* out: start block allocated */
> {
> - int any; /* any useful extents from summary */
> + int maxlog; /* maximum useful extent from summary */
> xfs_rtblock_t bbno; /* bitmap block number */
> int error; /* error value */
> int i; /* bitmap block offset (loop control) */
> @@ -479,7 +479,7 @@ xfs_rtallocate_extent_near(
> * starting in this bitmap block.
> */
> error = xfs_rtany_summary(mp, tp, log2len, mp->m_rsumlevels - 1,
> - bbno + i, rtbufc, &any);
> + bbno + i, rtbufc, &maxlog);
> if (error) {
> return error;
> }
> @@ -487,7 +487,7 @@ xfs_rtallocate_extent_near(
> * If there are any useful extents starting here, try
> * allocating one.
> */
> - if (any) {
> + if (maxlog >= 0) {
> /*
> * On the positive side of the starting location.
> */
> @@ -527,7 +527,7 @@ xfs_rtallocate_extent_near(
> */
> error = xfs_rtany_summary(mp, tp,
> log2len, mp->m_rsumlevels - 1,
> - bbno + j, rtbufc, &any);
> + bbno + j, rtbufc, &maxlog);
> if (error) {
> return error;
> }
> @@ -539,7 +539,7 @@ xfs_rtallocate_extent_near(
> * extent given, we've already tried
> * that allocation, don't do it again.
> */
> - if (any)
> + if (maxlog >= 0)
> continue;
> error = xfs_rtallocate_extent_block(mp,
> tp, bbno + j, minlen, maxlen,
> --
> 2.41.0
>