All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bart Van Assche <Bart.VanAssche@sandisk.com>
To: "ming.lei@redhat.com" <ming.lei@redhat.com>
Cc: "hch@infradead.org" <hch@infradead.org>,
	"linux-block@vger.kernel.org" <linux-block@vger.kernel.org>,
	"axboe@fb.com" <axboe@fb.com>
Subject: Re: [PATCH v2 6/8] blk-mq: don't stop queue for quiescing
Date: Tue, 30 May 2017 17:02:23 +0000	[thread overview]
Message-ID: <1496163742.2627.11.camel@sandisk.com> (raw)
In-Reply-To: <20170530002703.GB29253@ming.t460p>

On Tue, 2017-05-30 at 08:27 +0800, Ming Lei wrote:
> On Sun, May 28, 2017 at 04:03:20PM +0000, Bart Van Assche wrote:
> > On Sun, 2017-05-28 at 18:50 +0800, Ming Lei wrote:
> > > On Sat, May 27, 2017 at 09:49:27PM +0000, Bart Van Assche wrote:
> > > > On Sat, 2017-05-27 at 22:21 +0800, Ming Lei wrote:
> > > > > diff --git a/block/blk-mq.c b/block/blk-mq.c
> > > > > index 032045841856..84cce67caee3 100644
> > > > > --- a/block/blk-mq.c
> > > > > +++ b/block/blk-mq.c
> > > > > @@ -168,8 +168,6 @@ void blk_mq_quiesce_queue(struct request_queu=
e *q)
> > > > >  	unsigned int i;
> > > > >  	bool rcu =3D false;
> > > > > =20
> > > > > -	__blk_mq_stop_hw_queues(q, true);
> > > > > -
> > > > >  	spin_lock_irq(q->queue_lock);
> > > > >  	queue_flag_set(QUEUE_FLAG_QUIESCED, q);
> > > > >  	spin_unlock_irq(q->queue_lock);
> > > > > @@ -198,7 +196,12 @@ void blk_mq_unquiesce_queue(struct request_q=
ueue *q)
> > > > >  	queue_flag_clear(QUEUE_FLAG_QUIESCED, q);
> > > > >  	spin_unlock_irq(q->queue_lock);
> > > > > =20
> > > > > -	blk_mq_start_stopped_hw_queues(q, true);
> > > > > +	/*
> > > > > +	 * During quiescing, requests can be inserted
> > > > > +	 * to scheduler's queue or sw queue, so we run
> > > > > +	 * queues for dispatching these requests.
> > > > > +	 */
> > > > > +	blk_mq_start_hw_queues(q);
> > > > >  }
> > > > >  EXPORT_SYMBOL_GPL(blk_mq_unquiesce_queue);
> > > >=20
> > > > This looks really weird to me. If blk_mq_quiesce_queue() doesn't st=
op any
> > > > hardware queues, why should blk_mq_unquiesce_queue() start any hard=
ware
> > > > queues?
> > >=20
> > > Please see the above comment, especially in direct issue path, we hav=
e to
> > > insert the request into sw/scheduler queue when queue is quiesced,
> > > and these queued requests have to be dispatched out during unquiescin=
g.
> > >=20
> > > I considered to sleep the current context under this situation, but
> > > turns out it is more complicated to handle, given we have very limite=
d
> > > queue depth, just let applications consumes all, then wait.
> >=20
> > Hello Ming,
> >=20
> > The above seems to me to be an argument to *run* the queue from inside
> > blk_mq_unquiesce_queue() instead of *starting* stopped queues from insi=
de
> > that function.
>=20
> Yes, it is run queues, as you can see in my comment.
>=20
> The reality is that we can't run queue without clearing the STOPPED state=
.

Hello Ming,

I think it's completely wrong to make blk_mq_unquiesce_queue() to clear the
STOPPED state. Stopping a queue is typically used to tell the block layer t=
o
stop dispatching requests and not to resume dispatching requests until the
STOPPED flag is cleared. If stopping and quiescing a queue happen
simultaneously then dispatching should not occur before both
blk_mq_unquiesce_queue() and blk_mq_start_hw_queue() have been called. Your
patch would make dispatching start too early.

Bart.=

  reply	other threads:[~2017-05-30 17:02 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-27 14:21 [PATCH v2 0/8] blk-mq: fix & improve queue quiescing Ming Lei
2017-05-27 14:21 ` [PATCH v2 1/8] blk-mq: introduce blk_mq_unquiesce_queue Ming Lei
2017-05-30 15:09   ` Bart Van Assche
2017-05-27 14:21 ` [PATCH v2 2/8] block: introduce flag of QUEUE_FLAG_QUIESCED Ming Lei
2017-05-30 15:11   ` Bart Van Assche
2017-05-27 14:21 ` [PATCH v2 3/8] blk-mq: use the introduced blk_mq_unquiesce_queue() Ming Lei
2017-05-27 14:21   ` Ming Lei
2017-05-30 15:12   ` Bart Van Assche
2017-05-30 15:12     ` Bart Van Assche
2017-05-30 15:12     ` Bart Van Assche
2017-05-31  2:29     ` Ming Lei
2017-05-31  2:29       ` Ming Lei
2017-05-30 19:04   ` Eduardo Valentin
2017-05-30 19:04     ` Eduardo Valentin
2017-05-30 19:04     ` Eduardo Valentin
2017-05-31  2:28     ` Ming Lei
2017-05-31  2:28       ` Ming Lei
2017-05-27 14:21 ` [PATCH v2 4/8] blk-mq: fix blk_mq_quiesce_queue Ming Lei
2017-05-27 21:46   ` Bart Van Assche
2017-05-28 10:44     ` Ming Lei
2017-05-28 16:10       ` Bart Van Assche
2017-05-30  0:22         ` Ming Lei
2017-05-30 16:54           ` Bart Van Assche
2017-05-31  2:38             ` Ming Lei
2017-05-30 19:23       ` Bart Van Assche
2017-05-31  2:52         ` Ming Lei
2017-05-27 14:21 ` [PATCH v2 5/8] blk-mq: update comments on blk_mq_quiesce_queue() Ming Lei
2017-05-30 17:14   ` Bart Van Assche
2017-05-31  9:51     ` Ming Lei
2017-05-27 14:21 ` [PATCH v2 6/8] blk-mq: don't stop queue for quiescing Ming Lei
2017-05-27 21:49   ` Bart Van Assche
2017-05-28 10:50     ` Ming Lei
2017-05-28 16:03       ` Bart Van Assche
2017-05-30  0:27         ` Ming Lei
2017-05-30 17:02           ` Bart Van Assche [this message]
2017-05-31  2:55             ` Ming Lei
2017-05-27 14:21 ` [PATCH v2 7/8] blk-mq: clarify dispatch may not be drained/blocked by stopping queue Ming Lei
2017-05-27 14:21 ` [PATCH v2 8/8] Revert "blk-mq: don't use sync workqueue flushing from drivers" Ming Lei
2017-05-27 21:32 ` [PATCH v2 0/8] blk-mq: fix & improve queue quiescing Bart Van Assche
2017-05-28 11:11   ` Ming Lei
2017-05-28 16:01     ` Bart Van Assche
2017-05-30  0:34       ` Ming Lei

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=1496163742.2627.11.camel@sandisk.com \
    --to=bart.vanassche@sandisk.com \
    --cc=axboe@fb.com \
    --cc=hch@infradead.org \
    --cc=linux-block@vger.kernel.org \
    --cc=ming.lei@redhat.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.