Re: [PATCH 07/19] xfs: reflow the tail end of xfs_bmap_rtalloc

Darrick J. Wong
2023-12-14T20:51:04Z

On Thu, Dec 14, 2023 at 07:34:26AM +0100, Christoph Hellwig wrote:
> Reorder the tail end of xfs_bmap_rtalloc so that the successfully
> allocation is in the main path, and the error handling is on a branch.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>

Looks ok to me
Reviewed-by: Darrick J. Wong <djwong@kernel.org>

--D

> ---
> fs/xfs/xfs_rtalloc.c | 60 ++++++++++++++++++++++----------------------
> 1 file changed, 30 insertions(+), 30 deletions(-)
>
> diff --git a/fs/xfs/xfs_rtalloc.c b/fs/xfs/xfs_rtalloc.c
> index dac148d53af3ec..158a631379378e 100644
> --- a/fs/xfs/xfs_rtalloc.c
> +++ b/fs/xfs/xfs_rtalloc.c
> @@ -1479,39 +1479,39 @@ xfs_bmap_rtalloc(
> raminlen = max_t(xfs_rtxlen_t, 1, xfs_extlen_to_rtxlen(mp, minlen));
> error = xfs_rtallocate_extent(ap->tp, rtx, raminlen, ralen, &ralen,
> ap->wasdel, prod, &rtx);
> - if (!error) {
> - ap->blkno = xfs_rtx_to_rtb(mp, rtx);
> - ap->length = xfs_rtxlen_to_extlen(mp, ralen);
> - xfs_bmap_alloc_account(ap);
> - return 0;
> - }
> -
> - if (error != -ENOSPC)
> - return error;
> + if (error == -ENOSPC) {
> + if (align > mp->m_sb.sb_rextsize) {
> + /*
> + * We previously enlarged the request length to try to
> + * satisfy an extent size hint. The allocator didn't
> + * return anything, so reset the parameters to the
> + * original values and try again without alignment
> + * criteria.
> + */
> + ap->offset = orig_offset;
> + ap->length = orig_length;
> + minlen = align = mp->m_sb.sb_rextsize;
> + goto retry;
> + }
>
> - if (align > mp->m_sb.sb_rextsize) {
> - /*
> - * We previously enlarged the request length to try to satisfy
> - * an extent size hint. The allocator didn't return anything,
> - * so reset the parameters to the original values and try again
> - * without alignment criteria.
> - */
> - ap->offset = orig_offset;
> - ap->length = orig_length;
> - minlen = align = mp->m_sb.sb_rextsize;
> - goto retry;
> - }
> + if (!ignore_locality && ap->blkno != 0) {
> + /*
> + * If we can't allocate near a specific rt extent, try
> + * again without locality criteria.
> + */
> + ignore_locality = true;
> + goto retry;
> + }
>
> - if (!ignore_locality && ap->blkno != 0) {
> - /*
> - * If we can't allocate near a specific rt extent, try again
> - * without locality criteria.
> - */
> - ignore_locality = true;
> - goto retry;
> + ap->blkno = NULLFSBLOCK;
> + ap->length = 0;
> + return 0;
> }
> + if (error)
> + return error;
>
> - ap->blkno = NULLFSBLOCK;
> - ap->length = 0;
> + ap->blkno = xfs_rtx_to_rtb(mp, rtx);
> + ap->length = xfs_rtxlen_to_extlen(mp, ralen);
> + xfs_bmap_alloc_account(ap);
> return 0;
> }
> --
> 2.39.2
>
>