All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Brian Foster <bfoster@redhat.com>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH v2 02/11] xfs: move small allocation helper
Date: Fri, 21 Jun 2019 16:58:06 -0700	[thread overview]
Message-ID: <20190621235806.GA5387@magnolia> (raw)
In-Reply-To: <20190522180546.17063-3-bfoster@redhat.com>

On Wed, May 22, 2019 at 02:05:37PM -0400, Brian Foster wrote:
> Move the small allocation helper further up in the file to avoid the
> need for a function declaration. The remaining declarations will be
> removed by followup patches. No functional changes.
> 
> Signed-off-by: Brian Foster <bfoster@redhat.com>

Looks ok,
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>

--D

> ---
>  fs/xfs/libxfs/xfs_alloc.c | 192 +++++++++++++++++++-------------------
>  1 file changed, 95 insertions(+), 97 deletions(-)
> 
> diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c
> index 9751531d3000..b345fe771c54 100644
> --- a/fs/xfs/libxfs/xfs_alloc.c
> +++ b/fs/xfs/libxfs/xfs_alloc.c
> @@ -41,8 +41,6 @@ struct workqueue_struct *xfs_alloc_wq;
>  STATIC int xfs_alloc_ag_vextent_exact(xfs_alloc_arg_t *);
>  STATIC int xfs_alloc_ag_vextent_near(xfs_alloc_arg_t *);
>  STATIC int xfs_alloc_ag_vextent_size(xfs_alloc_arg_t *);
> -STATIC int xfs_alloc_ag_vextent_small(xfs_alloc_arg_t *,
> -		xfs_btree_cur_t *, xfs_agblock_t *, xfs_extlen_t *, int *);
>  
>  /*
>   * Size of the AGFL.  For CRC-enabled filesystes we steal a couple of slots in
> @@ -699,6 +697,101 @@ xfs_alloc_update_counters(
>   * Allocation group level functions.
>   */
>  
> +/*
> + * Deal with the case where only small freespaces remain. Either return the
> + * contents of the last freespace record, or allocate space from the freelist if
> + * there is nothing in the tree.
> + */
> +STATIC int			/* error */
> +xfs_alloc_ag_vextent_small(
> +	struct xfs_alloc_arg	*args,	/* allocation argument structure */
> +	struct xfs_btree_cur	*ccur,	/* optional by-size cursor */
> +	xfs_agblock_t		*fbnop,	/* result block number */
> +	xfs_extlen_t		*flenp,	/* result length */
> +	int			*stat)	/* status: 0-freelist, 1-normal/none */
> +{
> +	int			error = 0;
> +	xfs_agblock_t		fbno = NULLAGBLOCK;
> +	xfs_extlen_t		flen = 0;
> +	int			i;
> +
> +	error = xfs_btree_decrement(ccur, 0, &i);
> +	if (error)
> +		goto error;
> +	if (i) {
> +		error = xfs_alloc_get_rec(ccur, &fbno, &flen, &i);
> +		if (error)
> +			goto error;
> +		XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error);
> +		goto out;
> +	}
> +
> +	if (args->minlen != 1 || args->alignment != 1 ||
> +	    args->resv == XFS_AG_RESV_AGFL ||
> +	    (be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_flcount) <=
> +	     args->minleft))
> +		goto out;
> +
> +	error = xfs_alloc_get_freelist(args->tp, args->agbp, &fbno, 0);
> +	if (error)
> +		goto error;
> +	if (fbno == NULLAGBLOCK)
> +		goto out;
> +
> +	xfs_extent_busy_reuse(args->mp, args->agno, fbno, 1,
> +			      xfs_alloc_allow_busy_reuse(args->datatype));
> +
> +	if (xfs_alloc_is_userdata(args->datatype)) {
> +		struct xfs_buf	*bp;
> +
> +		bp = xfs_btree_get_bufs(args->mp, args->tp, args->agno, fbno,
> +					0);
> +		if (!bp) {
> +			error = -EFSCORRUPTED;
> +			goto error;
> +		}
> +		xfs_trans_binval(args->tp, bp);
> +	}
> +	args->len = 1;
> +	args->agbno = fbno;
> +	XFS_WANT_CORRUPTED_GOTO(args->mp,
> +		fbno < be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length),
> +		error);
> +	args->wasfromfl = 1;
> +	trace_xfs_alloc_small_freelist(args);
> +
> +	/*
> +	 * If we're feeding an AGFL block to something that doesn't live in the
> +	 * free space, we need to clear out the OWN_AG rmap.
> +	 */
> +	error = xfs_rmap_free(args->tp, args->agbp, args->agno, fbno, 1,
> +			      &XFS_RMAP_OINFO_AG);
> +	if (error)
> +		goto error;
> +
> +	*stat = 0;
> +	return 0;
> +
> +out:
> +	/*
> +	 * Can't do the allocation, give up.
> +	 */
> +	if (flen < args->minlen) {
> +		args->agbno = NULLAGBLOCK;
> +		trace_xfs_alloc_small_notenough(args);
> +		flen = 0;
> +	}
> +	*fbnop = fbno;
> +	*flenp = flen;
> +	*stat = 1;
> +	trace_xfs_alloc_small_done(args);
> +	return 0;
> +
> +error:
> +	trace_xfs_alloc_small_error(args);
> +	return error;
> +}
> +
>  /*
>   * Allocate a variable extent in the allocation group agno.
>   * Type and bno are used to determine where in the allocation group the
> @@ -1582,101 +1675,6 @@ xfs_alloc_ag_vextent_size(
>  	return 0;
>  }
>  
> -/*
> - * Deal with the case where only small freespaces remain. Either return the
> - * contents of the last freespace record, or allocate space from the freelist if
> - * there is nothing in the tree.
> - */
> -STATIC int			/* error */
> -xfs_alloc_ag_vextent_small(
> -	struct xfs_alloc_arg	*args,	/* allocation argument structure */
> -	struct xfs_btree_cur	*ccur,	/* optional by-size cursor */
> -	xfs_agblock_t		*fbnop,	/* result block number */
> -	xfs_extlen_t		*flenp,	/* result length */
> -	int			*stat)	/* status: 0-freelist, 1-normal/none */
> -{
> -	int			error = 0;
> -	xfs_agblock_t		fbno = NULLAGBLOCK;
> -	xfs_extlen_t		flen = 0;
> -	int			i;
> -
> -	error = xfs_btree_decrement(ccur, 0, &i);
> -	if (error)
> -		goto error;
> -	if (i) {
> -		error = xfs_alloc_get_rec(ccur, &fbno, &flen, &i);
> -		if (error)
> -			goto error;
> -		XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error);
> -		goto out;
> -	}
> -
> -	if (args->minlen != 1 || args->alignment != 1 ||
> -	    args->resv == XFS_AG_RESV_AGFL ||
> -	    (be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_flcount) <=
> -	     args->minleft))
> -		goto out;
> -
> -	error = xfs_alloc_get_freelist(args->tp, args->agbp, &fbno, 0);
> -	if (error)
> -		goto error;
> -	if (fbno == NULLAGBLOCK)
> -		goto out;
> -
> -	xfs_extent_busy_reuse(args->mp, args->agno, fbno, 1,
> -			      xfs_alloc_allow_busy_reuse(args->datatype));
> -
> -	if (xfs_alloc_is_userdata(args->datatype)) {
> -		struct xfs_buf	*bp;
> -
> -		bp = xfs_btree_get_bufs(args->mp, args->tp, args->agno, fbno,
> -					0);
> -		if (!bp) {
> -			error = -EFSCORRUPTED;
> -			goto error;
> -		}
> -		xfs_trans_binval(args->tp, bp);
> -	}
> -	args->len = 1;
> -	args->agbno = fbno;
> -	XFS_WANT_CORRUPTED_GOTO(args->mp,
> -		fbno < be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length),
> -		error);
> -	args->wasfromfl = 1;
> -	trace_xfs_alloc_small_freelist(args);
> -
> -	/*
> -	 * If we're feeding an AGFL block to something that doesn't live in the
> -	 * free space, we need to clear out the OWN_AG rmap.
> -	 */
> -	error = xfs_rmap_free(args->tp, args->agbp, args->agno, fbno, 1,
> -			      &XFS_RMAP_OINFO_AG);
> -	if (error)
> -		goto error;
> -
> -	*stat = 0;
> -	return 0;
> -
> -out:
> -	/*
> -	 * Can't do the allocation, give up.
> -	 */
> -	if (flen < args->minlen) {
> -		args->agbno = NULLAGBLOCK;
> -		trace_xfs_alloc_small_notenough(args);
> -		flen = 0;
> -	}
> -	*fbnop = fbno;
> -	*flenp = flen;
> -	*stat = 1;
> -	trace_xfs_alloc_small_done(args);
> -	return 0;
> -
> -error:
> -	trace_xfs_alloc_small_error(args);
> -	return error;
> -}
> -
>  /*
>   * Free the extent starting at agno/bno for length.
>   */
> -- 
> 2.17.2
> 

  reply	other threads:[~2019-06-21 23:58 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-22 18:05 [PATCH v2 00/11] xfs: rework extent allocation Brian Foster
2019-05-22 18:05 ` [PATCH v2 01/11] xfs: clean up small allocation helper Brian Foster
2019-06-21 23:57   ` Darrick J. Wong
2019-05-22 18:05 ` [PATCH v2 02/11] xfs: move " Brian Foster
2019-06-21 23:58   ` Darrick J. Wong [this message]
2019-05-22 18:05 ` [PATCH v2 03/11] xfs: skip small alloc cntbt logic on NULL cursor Brian Foster
2019-06-21 23:58   ` Darrick J. Wong
2019-05-22 18:05 ` [PATCH v2 04/11] xfs: always update params on small allocation Brian Foster
2019-06-21 23:59   ` Darrick J. Wong
2019-05-22 18:05 ` [PATCH v2 05/11] xfs: track active state of allocation btree cursors Brian Foster
2019-05-22 18:05 ` [PATCH v2 06/11] xfs: use locality optimized cntbt lookups for near mode allocations Brian Foster
2019-05-22 18:05 ` [PATCH v2 07/11] xfs: refactor exact extent allocation mode Brian Foster
2019-05-22 18:05 ` [PATCH v2 08/11] xfs: refactor by-size " Brian Foster
2019-05-22 18:05 ` [PATCH v2 09/11] xfs: replace small allocation logic with agfl only logic Brian Foster
2019-05-22 18:05 ` [PATCH v2 10/11] xfs: refactor successful AG allocation accounting code Brian Foster
2019-05-22 18:05 ` [PATCH v2 11/11] xfs: condense high level AG allocation functions Brian Foster
2019-05-23  1:56 ` [PATCH v2 00/11] xfs: rework extent allocation Dave Chinner
2019-05-23 12:55   ` Brian Foster
2019-05-23 22:15     ` Dave Chinner
2019-05-24 12:00       ` Brian Foster
2019-05-25 22:43         ` Dave Chinner
2019-05-31 17:11           ` Brian Foster
2019-06-06 15:21             ` Brian Foster
2019-06-06 22:13               ` Dave Chinner
2019-06-07 12:57                 ` Brian Foster
2019-06-06 22:05             ` Dave Chinner
2019-06-07 12:56               ` Brian Foster
2019-06-21 15:18 ` Darrick J. Wong
2019-07-01 19:12   ` Brian Foster

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=20190621235806.GA5387@magnolia \
    --to=darrick.wong@oracle.com \
    --cc=bfoster@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.