public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Brian Foster <bfoster@redhat.com>
To: Dave Chinner <david@fromorbit.com>
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH 1/2] xfs: cleanup xfs_bmse_shift_one goto mess
Date: Mon, 1 Dec 2014 11:41:30 -0500	[thread overview]
Message-ID: <20141201164130.GB23055@bfoster.bfoster> (raw)
In-Reply-To: <1417407608-8016-2-git-send-email-david@fromorbit.com>

On Mon, Dec 01, 2014 at 03:20:07PM +1100, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
> 
> xfs_bmse_shift_one() jumps around determining whether to shift or
> merge, making the code flow difficult to follow. Clean it up and
> use direct error returns (including XFS_WANT_CORRUPTED_RETURN) to
> make the code flow better and be easier to read.
> 
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> ---

Reviewed-by: Brian Foster <bfoster@redhat.com>

>  fs/xfs/libxfs/xfs_bmap.c | 43 +++++++++++++++++--------------------------
>  1 file changed, 17 insertions(+), 26 deletions(-)
> 
> diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
> index 20d2e96..0628a67 100644
> --- a/fs/xfs/libxfs/xfs_bmap.c
> +++ b/fs/xfs/libxfs/xfs_bmap.c
> @@ -5544,35 +5544,29 @@ xfs_bmse_shift_one(
>  	startoff = got.br_startoff - offset_shift_fsb;
>  
>  	/* delalloc extents should be prevented by caller */
> -	XFS_WANT_CORRUPTED_GOTO(!isnullstartblock(got.br_startblock),
> -				out_error);
> +	XFS_WANT_CORRUPTED_RETURN(!isnullstartblock(got.br_startblock));
>  
>  	/*
> -	 * If this is the first extent in the file, make sure there's enough
> -	 * room at the start of the file and jump right to the shift as there's
> -	 * no left extent to merge.
> +	 * Check for merge if we've got an extent to the left, otherwise make
> +	 * sure there's enough room at the start of the file for the shift.
>  	 */
> -	if (*current_ext == 0) {
> -		if (got.br_startoff < offset_shift_fsb)
> -			return -EINVAL;
> -		goto shift_extent;
> -	}
> +	if (*current_ext) {
> +		/* grab the left extent and check for a large enough hole */
> +		leftp = xfs_iext_get_ext(ifp, *current_ext - 1);
> +		xfs_bmbt_get_all(leftp, &left);
>  
> -	/* grab the left extent and check for a large enough hole */
> -	leftp = xfs_iext_get_ext(ifp, *current_ext - 1);
> -	xfs_bmbt_get_all(leftp, &left);
> +		if (startoff < left.br_startoff + left.br_blockcount)
> +			return -EINVAL;
>  
> -	if (startoff < left.br_startoff + left.br_blockcount)
> +		/* check whether to merge the extent or shift it down */
> +		if (xfs_bmse_can_merge(&left, &got, offset_shift_fsb)) {
> +			return xfs_bmse_merge(ip, whichfork, offset_shift_fsb,
> +					      *current_ext, gotp, leftp, cur,
> +					      logflags);
> +		}
> +	} else if (got.br_startoff < offset_shift_fsb)
>  		return -EINVAL;
>  
> -	/* check whether to merge the extent or shift it down */
> -	if (!xfs_bmse_can_merge(&left, &got, offset_shift_fsb))
> -		goto shift_extent;
> -
> -	return xfs_bmse_merge(ip, whichfork, offset_shift_fsb, *current_ext,
> -			      gotp, leftp, cur, logflags);
> -
> -shift_extent:
>  	/*
>  	 * Increment the extent index for the next iteration, update the start
>  	 * offset of the in-core extent and update the btree if applicable.
> @@ -5589,14 +5583,11 @@ shift_extent:
>  				   got.br_blockcount, &i);
>  	if (error)
>  		return error;
> -	XFS_WANT_CORRUPTED_GOTO(i == 1, out_error);
> +	XFS_WANT_CORRUPTED_RETURN(i == 1);
>  
>  	got.br_startoff = startoff;
>  	return xfs_bmbt_update(cur, got.br_startoff, got.br_startblock,
>  				got.br_blockcount, got.br_state);
> -
> -out_error:
> -	return error;
>  }
>  
>  /*
> -- 
> 2.0.0
> 
> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  reply	other threads:[~2014-12-01 16:41 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-01  4:20 [PATCH 0/2] xfs: more return cleanups Dave Chinner
2014-12-01  4:20 ` [PATCH 1/2] xfs: cleanup xfs_bmse_shift_one goto mess Dave Chinner
2014-12-01 16:41   ` Brian Foster [this message]
2014-12-01  4:20 ` [PATCH 2/2] xfs: cleanup xfs_bmse_merge returns Dave Chinner
2014-12-01 16:41   ` 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=20141201164130.GB23055@bfoster.bfoster \
    --to=bfoster@redhat.com \
    --cc=david@fromorbit.com \
    --cc=xfs@oss.sgi.com \
    /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