public inbox for linux-block@vger.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Jeff Moyer <jmoyer@redhat.com>
Cc: axboe@kernel.dk, linux-block@vger.kernel.org
Subject: Re: [patch] block: clarify documentation for blk_{start|finish}_plug
Date: Tue, 8 Jan 2019 14:09:38 -0800	[thread overview]
Message-ID: <20190108220938.GI21010@magnolia> (raw)
In-Reply-To: <x49a7ka7qy9.fsf@segfault.boston.devel.redhat.com>

On Tue, Jan 08, 2019 at 04:57:34PM -0500, Jeff Moyer wrote:
> There was some confusion about what these functions did.  Make it clear
> that this is a hint for upper layers to pass to the block layer, and
> that it does not guarantee that I/O will not be submitted between a
> start and finish plug.
> 
> Reported-by: "Darrick J. Wong" <darrick.wong@oracle.com>
> Signed-off-by: Jeff Moyer <jmoyer@redhat.com>
> 
> diff --git a/block/blk-core.c b/block/blk-core.c
> index c78042975737..f2732f106a2e 100644
> --- a/block/blk-core.c
> +++ b/block/blk-core.c
> @@ -1683,6 +1683,15 @@ EXPORT_SYMBOL(kblockd_mod_delayed_work_on);
>   * @plug:	The &struct blk_plug that needs to be initialized
>   *
>   * Description:
> + *   blk_start_plug() indicates to the block layer an intent by the caller
> + *   to submit multiple I/O requests in a batch.  The block layer may use
> + *   this hint to defer submitting I/Os from the caller until blk_finish_plug()
> + *   is called.  However, the block layer may choose to submit requests
> + *   before a call to blk_finish_plug() if the number of queued I/Os
> + *   exceeds %BLK_MAX_REQUEST_COUNT, or if the size of the I/O is larger than
> + *   %BLK_PLUG_FLUSH_SIZE.  The queued I/Os may also be submitted early if
> + *   the task schedules (see below).

Makes sense to my poor brain,

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

--D

>   *   Tracking blk_plug inside the task_struct will help with auto-flushing the
>   *   pending I/O should the task end up blocking between blk_start_plug() and
>   *   blk_finish_plug(). This is important from a performance perspective, but
> @@ -1765,6 +1774,16 @@ void blk_flush_plug_list(struct blk_plug *plug, bool from_schedule)
>  		blk_mq_flush_plug_list(plug, from_schedule);
>  }
>  
> +/**
> + * blk_finish_plug - mark the end of a batch of submitted I/O
> + * @plug:	The &struct blk_plug passed to blk_start_plug()
> + *
> + * Description:
> + * Indicate that a batch of I/O submissions is complete.  This function
> + * must be paired with an initial call to blk_start_plug().  The intent
> + * is to allow the block layer to optimize I/O submission.  See the
> + * documentation for blk_start_plug() for more information.
> + */
>  void blk_finish_plug(struct blk_plug *plug)
>  {
>  	if (plug != current->plug)

  reply	other threads:[~2019-01-08 22:09 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-08 21:57 [patch] block: clarify documentation for blk_{start|finish}_plug Jeff Moyer
2019-01-08 22:09 ` Darrick J. Wong [this message]
2019-01-09  3:07 ` Ming Lei
2019-01-09  3:50 ` Jens Axboe

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=20190108220938.GI21010@magnolia \
    --to=darrick.wong@oracle.com \
    --cc=axboe@kernel.dk \
    --cc=jmoyer@redhat.com \
    --cc=linux-block@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox