All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brian Foster <bfoster@redhat.com>
To: Eric Sandeen <sandeen@redhat.com>
Cc: xfs-oss <xfs@oss.sgi.com>
Subject: Re: [PATCH] xfs: deduplicate xlog_do_recovery_pass()
Date: Thu, 21 Aug 2014 08:36:06 -0400	[thread overview]
Message-ID: <20140821123604.GA64112@bfoster.bfoster> (raw)
In-Reply-To: <53F5651C.8030206@redhat.com>

On Wed, Aug 20, 2014 at 10:18:52PM -0500, Eric Sandeen wrote:
> In xlog_do_recovery_pass(), there are 2 distinct cases:
> non-wrapped and wrapped log recovery.
> 
> If we find a wrapped log, we recover around the end
> of the log, and then handle the rest of recovery
> exactly as in the non-wrapped case - using exactly the same
> (duplicated) code.
> 
> Rather than having the same code in both cases, we can
> get the wrapped portion out of the way first if needed,
> and then recover the non-wrapped portion of the log.
> 
> There should be no functional change here, just code
> reorganization & deduplication.
> 
> The patch looks a bit bigger than it really is; the last
> hunk is whitespace changes (un-indenting).
> 
> Tested with xfstests "check -g log" on a stock configuration.
> 
> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
> ---

Looks good to me:

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

> 
>  xfs_log_recover.c |   81 ++++++++++++++++++------------------------------------
>  1 file changed, 27 insertions(+), 54 deletions(-)
> 
> diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
> index 1fd5787..08d3569 100644
> --- a/fs/xfs/xfs_log_recover.c
> +++ b/fs/xfs/xfs_log_recover.c
> @@ -4132,41 +4132,13 @@ xlog_do_recovery_pass(
>  	}
>  
>  	memset(rhash, 0, sizeof(rhash));
> -	if (tail_blk <= head_blk) {
> -		for (blk_no = tail_blk; blk_no < head_blk; ) {
> -			error = xlog_bread(log, blk_no, hblks, hbp, &offset);
> -			if (error)
> -				goto bread_err2;
> -
> -			rhead = (xlog_rec_header_t *)offset;
> -			error = xlog_valid_rec_header(log, rhead, blk_no);
> -			if (error)
> -				goto bread_err2;
> -
> -			/* blocks in data section */
> -			bblks = (int)BTOBB(be32_to_cpu(rhead->h_len));
> -			error = xlog_bread(log, blk_no + hblks, bblks, dbp,
> -					   &offset);
> -			if (error)
> -				goto bread_err2;
> -
> -			error = xlog_unpack_data(rhead, offset, log);
> -			if (error)
> -				goto bread_err2;
> -
> -			error = xlog_recover_process_data(log,
> -						rhash, rhead, offset, pass);
> -			if (error)
> -				goto bread_err2;
> -			blk_no += bblks + hblks;
> -		}
> -	} else {
> +	blk_no = tail_blk;
> +	if (tail_blk > head_blk) {
>  		/*
>  		 * Perform recovery around the end of the physical log.
>  		 * When the head is not on the same cycle number as the tail,
> -		 * we can't do a sequential recovery as above.
> +		 * we can't do a sequential recovery.
>  		 */
> -		blk_no = tail_blk;
>  		while (blk_no < log->l_logBBsize) {
>  			/*
>  			 * Check for header wrapping around physical end-of-log
> @@ -4280,34 +4252,35 @@ xlog_do_recovery_pass(
>  
>  		ASSERT(blk_no >= log->l_logBBsize);
>  		blk_no -= log->l_logBBsize;
> +	}
>  
> -		/* read first part of physical log */
> -		while (blk_no < head_blk) {
> -			error = xlog_bread(log, blk_no, hblks, hbp, &offset);
> -			if (error)
> -				goto bread_err2;
> +	/* read first part of physical log */
> +	while (blk_no < head_blk) {
> +		error = xlog_bread(log, blk_no, hblks, hbp, &offset);
> +		if (error)
> +			goto bread_err2;
>  
> -			rhead = (xlog_rec_header_t *)offset;
> -			error = xlog_valid_rec_header(log, rhead, blk_no);
> -			if (error)
> -				goto bread_err2;
> +		rhead = (xlog_rec_header_t *)offset;
> +		error = xlog_valid_rec_header(log, rhead, blk_no);
> +		if (error)
> +			goto bread_err2;
>  
> -			bblks = (int)BTOBB(be32_to_cpu(rhead->h_len));
> -			error = xlog_bread(log, blk_no+hblks, bblks, dbp,
> -					   &offset);
> -			if (error)
> -				goto bread_err2;
> +		/* blocks in data section */
> +		bblks = (int)BTOBB(be32_to_cpu(rhead->h_len));
> +		error = xlog_bread(log, blk_no+hblks, bblks, dbp,
> +				   &offset);
> +		if (error)
> +			goto bread_err2;
>  
> -			error = xlog_unpack_data(rhead, offset, log);
> -			if (error)
> -				goto bread_err2;
> +		error = xlog_unpack_data(rhead, offset, log);
> +		if (error)
> +			goto bread_err2;
>  
> -			error = xlog_recover_process_data(log, rhash,
> -							rhead, offset, pass);
> -			if (error)
> -				goto bread_err2;
> -			blk_no += bblks + hblks;
> -		}
> +		error = xlog_recover_process_data(log, rhash,
> +						rhead, offset, pass);
> +		if (error)
> +			goto bread_err2;
> +		blk_no += bblks + hblks;
>  	}
>  
>   bread_err2:
> 
> _______________________________________________
> 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

      parent reply	other threads:[~2014-08-21 12:36 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-21  3:18 [PATCH] xfs: deduplicate xlog_do_recovery_pass() Eric Sandeen
2014-08-21  4:36 ` Eric Sandeen
2014-08-21  4:49   ` Dave Chinner
2014-08-21  4:58     ` Eric Sandeen
2014-08-21  5:12       ` Dave Chinner
2014-08-21 12:36 ` Brian Foster [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=20140821123604.GA64112@bfoster.bfoster \
    --to=bfoster@redhat.com \
    --cc=sandeen@redhat.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 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.