All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brian Foster <bfoster@redhat.com>
To: Christoph Hellwig <hch@lst.de>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 8/8] xfs: simplify the list iteration in xlog_write
Date: Thu, 17 Jun 2021 12:24:34 -0400	[thread overview]
Message-ID: <YMt3Qqseo/rjTxU+@bfoster> (raw)
In-Reply-To: <20210616163212.1480297-9-hch@lst.de>

On Wed, Jun 16, 2021 at 06:32:12PM +0200, Christoph Hellwig wrote:
> Just use a single list_for_each_entry in xlog_write which then
> dispatches to the simple or partial cases instead of using nested
> loops.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---

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

>  fs/xfs/xfs_log.c | 73 +++++++++++-------------------------------------
>  1 file changed, 17 insertions(+), 56 deletions(-)
> 
> diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
> index f8df09f37c3b84..365914c25ff0f0 100644
> --- a/fs/xfs/xfs_log.c
> +++ b/fs/xfs/xfs_log.c
> @@ -2175,47 +2175,6 @@ xlog_write_full(
>  	}
>  }
>  
> -/*
> - * Write whole log vectors into a single iclog which is guaranteed to have
> - * either sufficient space for the entire log vector chain to be written or
> - * exclusive access to the remaining space in the iclog.
> - *
> - * Return the number of iovecs and data written into the iclog, as well as
> - * a pointer to the logvec that doesn't fit in the log (or NULL if we hit the
> - * end of the chain.
> - */
> -static struct xfs_log_vec *
> -xlog_write_single(
> -	struct list_head	*lv_chain,
> -	struct xfs_log_vec	*log_vector,
> -	struct xlog_ticket	*ticket,
> -	struct xlog_in_core	*iclog,
> -	uint32_t		*log_offset,
> -	uint32_t		*len,
> -	uint32_t		*record_cnt,
> -	uint32_t		*data_cnt)
> -{
> -	struct xfs_log_vec	*lv;
> -
> -	for (lv = log_vector;
> -	     !list_entry_is_head(lv, lv_chain, lv_list);
> -	     lv = list_next_entry(lv, lv_list)) {
> -		/*
> -		 * If the entire log vec does not fit in the iclog, punt it to
> -		 * the partial copy loop which can handle this case.
> -		 */
> -		if (lv->lv_niovecs &&
> -		    lv->lv_bytes > iclog->ic_size - *log_offset)
> -			break;
> -		xlog_write_full(lv, ticket, iclog, log_offset, len, record_cnt,
> -				data_cnt);
> -	}
> -	if (list_entry_is_head(lv, lv_chain, lv_list))
> -		lv = NULL;
> -	ASSERT(*len == 0 || lv);
> -	return lv;
> -}
> -
>  static int
>  xlog_write_get_more_iclog_space(
>  	struct xlog		*log,
> @@ -2454,22 +2413,24 @@ xlog_write(
>  	if (start_lsn)
>  		*start_lsn = be64_to_cpu(iclog->ic_header.h_lsn);
>  
> -	lv = list_first_entry_or_null(lv_chain, struct xfs_log_vec, lv_list);
> -	while (lv) {
> -		lv = xlog_write_single(lv_chain, lv, ticket, iclog, &log_offset,
> -					&len, &record_cnt, &data_cnt);
> -		if (!lv)
> -			break;
> -
> -		error = xlog_write_partial(lv, ticket, &iclog, &log_offset,
> -					   &len, &record_cnt, &data_cnt);
> -		if (error)
> -			break;
> -		lv = list_next_entry(lv, lv_list);
> -		if (list_entry_is_head(lv, lv_chain, lv_list))
> -			break;
> +	list_for_each_entry(lv, lv_chain, lv_list) {
> +		/*
> +		 * If the entire log vec does not fit in the iclog, punt it to
> +		 * the partial copy loop which can handle this case.
> +		 */
> +		if (lv->lv_niovecs &&
> +		    lv->lv_bytes > iclog->ic_size - log_offset) {
> +			error = xlog_write_partial(lv, ticket, &iclog,
> +						   &log_offset, &len,
> +						   &record_cnt, &data_cnt);
> +			if (error)
> +				break;
> +		} else {
> +			xlog_write_full(lv, ticket, iclog, &log_offset, &len,
> +					&record_cnt, &data_cnt);
> +		}
>  	}
> -	ASSERT((len == 0 && !lv) || error);
> +	ASSERT(len == 0 || error);
>  
>  	/*
>  	 * We've already been guaranteed that the last writes will fit inside
> -- 
> 2.30.2
> 


  reply	other threads:[~2021-06-17 16:24 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-16 16:32 log write cleanups Christoph Hellwig
2021-06-16 16:32 ` [PATCH 1/8] xfs: change the type of ic_datap Christoph Hellwig
2021-06-17 16:22   ` Brian Foster
2021-06-18  5:52   ` Chandan Babu R
2021-06-16 16:32 ` [PATCH 2/8] xfs: list entry elements don't need to be initialized Christoph Hellwig
2021-06-17 16:23   ` Brian Foster
2021-06-18  5:59   ` Chandan Babu R
2021-06-16 16:32 ` [PATCH 3/8] xfs: factor out a helper to write a log_iovec into the iclog Christoph Hellwig
2021-06-17 16:23   ` Brian Foster
2021-06-18 13:24     ` Christoph Hellwig
2021-06-18  7:42   ` Chandan Babu R
2021-06-16 16:32 ` [PATCH 4/8] xfs: remove xlog_write_adv_cnt and simplify xlog_write_partial Christoph Hellwig
2021-06-17 16:23   ` Brian Foster
2021-06-18  7:50   ` Chandan Babu R
2021-06-16 16:32 ` [PATCH 5/8] xfs: remove xlog_verify_dest_ptr Christoph Hellwig
2021-06-17 16:24   ` Brian Foster
2021-06-18 10:31   ` Chandan Babu R
2021-06-16 16:32 ` [PATCH 6/8] xfs: simplify the xlog_write_partial calling conventions Christoph Hellwig
2021-06-17 16:24   ` Brian Foster
2021-06-18 11:07   ` Chandan Babu R
2021-06-16 16:32 ` [PATCH 7/8] xfs: factor out a xlog_write_full_log_vec helper Christoph Hellwig
2021-06-17 16:24   ` Brian Foster
2021-06-18 13:33     ` Christoph Hellwig
2021-06-16 16:32 ` [PATCH 8/8] xfs: simplify the list iteration in xlog_write Christoph Hellwig
2021-06-17 16:24   ` Brian Foster [this message]
2021-06-18 22:51 ` log write cleanups Dave Chinner

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=YMt3Qqseo/rjTxU+@bfoster \
    --to=bfoster@redhat.com \
    --cc=hch@lst.de \
    --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.