* [PATCH v2 3/8] blk-mq: use the introduced blk_mq_unquiesce_queue()
[not found] <20170527142126.26079-1-ming.lei@redhat.com>
@ 2017-05-27 14:21 ` Ming Lei
2017-05-30 15:12 ` Bart Van Assche
2017-05-30 19:04 ` Eduardo Valentin
0 siblings, 2 replies; 5+ messages in thread
From: Ming Lei @ 2017-05-27 14:21 UTC (permalink / raw)
To: Jens Axboe, linux-block, Christoph Hellwig
Cc: Bart Van Assche, Ming Lei, linux-nvme, linux-scsi, dm-devel
blk_mq_unquiesce_queue() is used for unquiescing the
queue explicitly, so replace blk_mq_start_stopped_hw_queues()
with it.
Cc: linux-nvme@lists.infradead.org
Cc: linux-scsi@vger.kernel.org
Cc: dm-devel@redhat.com
Signed-off-by: Ming Lei <ming.lei@redhat.com>
---
drivers/md/dm-rq.c | 2 +-
drivers/nvme/host/core.c | 2 +-
drivers/scsi/scsi_lib.c | 5 ++++-
3 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/md/dm-rq.c b/drivers/md/dm-rq.c
index 2af27026aa2e..673fcf075077 100644
--- a/drivers/md/dm-rq.c
+++ b/drivers/md/dm-rq.c
@@ -71,7 +71,7 @@ static void dm_old_start_queue(struct request_queue *q)
static void dm_mq_start_queue(struct request_queue *q)
{
- blk_mq_start_stopped_hw_queues(q, true);
+ blk_mq_unquiesce_queue(q);
blk_mq_kick_requeue_list(q);
}
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 04e115834702..231d36028afc 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -2514,7 +2514,7 @@ void nvme_start_queues(struct nvme_ctrl *ctrl)
mutex_lock(&ctrl->namespaces_mutex);
list_for_each_entry(ns, &ctrl->namespaces, list) {
- blk_mq_start_stopped_hw_queues(ns->queue, true);
+ blk_mq_unquiesce_queue(ns->queue);
blk_mq_kick_requeue_list(ns->queue);
}
mutex_unlock(&ctrl->namespaces_mutex);
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 814a4bd8405d..72b11f75719c 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -3030,7 +3030,10 @@ scsi_internal_device_unblock(struct scsi_device *sdev,
return -EINVAL;
if (q->mq_ops) {
- blk_mq_start_stopped_hw_queues(q, false);
+ if (blk_queue_quiesced(q))
+ blk_mq_unquiesce_queue(q);
+ else
+ blk_mq_start_stopped_hw_queues(q, false);
} else {
spin_lock_irqsave(q->queue_lock, flags);
blk_start_queue(q);
--
2.9.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 3/8] blk-mq: use the introduced blk_mq_unquiesce_queue()
2017-05-27 14:21 ` [PATCH v2 3/8] blk-mq: use the introduced blk_mq_unquiesce_queue() Ming Lei
@ 2017-05-30 15:12 ` Bart Van Assche
2017-05-31 2:29 ` Ming Lei
2017-05-30 19:04 ` Eduardo Valentin
1 sibling, 1 reply; 5+ messages in thread
From: Bart Van Assche @ 2017-05-30 15:12 UTC (permalink / raw)
To: hch@infradead.org, linux-block@vger.kernel.org, axboe@fb.com,
ming.lei@redhat.com
Cc: linux-scsi@vger.kernel.org, dm-devel@redhat.com,
linux-nvme@lists.infradead.org
On Sat, 2017-05-27 at 22:21 +0800, Ming Lei wrote:
> --- a/drivers/scsi/scsi_lib.c
> +++ b/drivers/scsi/scsi_lib.c
> @@ -3030,7 +3030,10 @@ scsi_internal_device_unblock(struct scsi_device *sdev,
> return -EINVAL;
>
> if (q->mq_ops) {
> - blk_mq_start_stopped_hw_queues(q, false);
> + if (blk_queue_quiesced(q))
> + blk_mq_unquiesce_queue(q);
> + else
> + blk_mq_start_stopped_hw_queues(q, false);
> } else {
> spin_lock_irqsave(q->queue_lock, flags);
> blk_start_queue(q);
Hello Ming,
Sorry but that change looks wrong to me. All what's needed here is a call
to blk_mq_unquiesce_queue().
Bart.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 3/8] blk-mq: use the introduced blk_mq_unquiesce_queue()
2017-05-27 14:21 ` [PATCH v2 3/8] blk-mq: use the introduced blk_mq_unquiesce_queue() Ming Lei
2017-05-30 15:12 ` Bart Van Assche
@ 2017-05-30 19:04 ` Eduardo Valentin
2017-05-31 2:28 ` Ming Lei
1 sibling, 1 reply; 5+ messages in thread
From: Eduardo Valentin @ 2017-05-30 19:04 UTC (permalink / raw)
To: Ming Lei
Cc: Jens Axboe, linux-block, Christoph Hellwig, Bart Van Assche,
linux-nvme, linux-scsi, dm-devel
On Sat, May 27, 2017 at 10:21:21PM +0800, Ming Lei wrote:
> blk_mq_unquiesce_queue() is used for unquiescing the
> queue explicitly, so replace blk_mq_start_stopped_hw_queues()
> with it.
>
> Cc: linux-nvme@lists.infradead.org
> Cc: linux-scsi@vger.kernel.org
> Cc: dm-devel@redhat.com
> Signed-off-by: Ming Lei <ming.lei@redhat.com>
> ---
> drivers/md/dm-rq.c | 2 +-
> drivers/nvme/host/core.c | 2 +-
> drivers/scsi/scsi_lib.c | 5 ++++-
> 3 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/md/dm-rq.c b/drivers/md/dm-rq.c
> index 2af27026aa2e..673fcf075077 100644
> --- a/drivers/md/dm-rq.c
> +++ b/drivers/md/dm-rq.c
> @@ -71,7 +71,7 @@ static void dm_old_start_queue(struct request_queue *q)
>
> static void dm_mq_start_queue(struct request_queue *q)
> {
> - blk_mq_start_stopped_hw_queues(q, true);
> + blk_mq_unquiesce_queue(q);
> blk_mq_kick_requeue_list(q);
> }
>
> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> index 04e115834702..231d36028afc 100644
> --- a/drivers/nvme/host/core.c
> +++ b/drivers/nvme/host/core.c
> @@ -2514,7 +2514,7 @@ void nvme_start_queues(struct nvme_ctrl *ctrl)
>
> mutex_lock(&ctrl->namespaces_mutex);
> list_for_each_entry(ns, &ctrl->namespaces, list) {
> - blk_mq_start_stopped_hw_queues(ns->queue, true);
> + blk_mq_unquiesce_queue(ns->queue);
> blk_mq_kick_requeue_list(ns->queue);
> }
> mutex_unlock(&ctrl->namespaces_mutex);
> diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
> index 814a4bd8405d..72b11f75719c 100644
> --- a/drivers/scsi/scsi_lib.c
> +++ b/drivers/scsi/scsi_lib.c
> @@ -3030,7 +3030,10 @@ scsi_internal_device_unblock(struct scsi_device *sdev,
> return -EINVAL;
>
> if (q->mq_ops) {
> - blk_mq_start_stopped_hw_queues(q, false);
> + if (blk_queue_quiesced(q))
> + blk_mq_unquiesce_queue(q);
Calling this here, at this point means:
blk_mq_start_stopped_hw_queues(q, true);
Does it make a difference, given that before the code always calling
blk_mq_start_stopped_hw_queues(q, false);
> + else
> + blk_mq_start_stopped_hw_queues(q, false);
Why do you need to care about the case of !blk_queue_quiesced(q)?
> } else {
> spin_lock_irqsave(q->queue_lock, flags);
> blk_start_queue(q);
> --
> 2.9.4
>
>
--
All the best,
Eduardo Valentin
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 3/8] blk-mq: use the introduced blk_mq_unquiesce_queue()
2017-05-30 19:04 ` Eduardo Valentin
@ 2017-05-31 2:28 ` Ming Lei
0 siblings, 0 replies; 5+ messages in thread
From: Ming Lei @ 2017-05-31 2:28 UTC (permalink / raw)
To: Eduardo Valentin
Cc: Jens Axboe, linux-block, Christoph Hellwig, Bart Van Assche,
linux-nvme, linux-scsi, dm-devel
On Tue, May 30, 2017 at 12:04:02PM -0700, Eduardo Valentin wrote:
> On Sat, May 27, 2017 at 10:21:21PM +0800, Ming Lei wrote:
> > blk_mq_unquiesce_queue() is used for unquiescing the
> > queue explicitly, so replace blk_mq_start_stopped_hw_queues()
> > with it.
> >
> > Cc: linux-nvme@lists.infradead.org
> > Cc: linux-scsi@vger.kernel.org
> > Cc: dm-devel@redhat.com
> > Signed-off-by: Ming Lei <ming.lei@redhat.com>
> > ---
> > drivers/md/dm-rq.c | 2 +-
> > drivers/nvme/host/core.c | 2 +-
> > drivers/scsi/scsi_lib.c | 5 ++++-
> > 3 files changed, 6 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/md/dm-rq.c b/drivers/md/dm-rq.c
> > index 2af27026aa2e..673fcf075077 100644
> > --- a/drivers/md/dm-rq.c
> > +++ b/drivers/md/dm-rq.c
> > @@ -71,7 +71,7 @@ static void dm_old_start_queue(struct request_queue *q)
> >
> > static void dm_mq_start_queue(struct request_queue *q)
> > {
> > - blk_mq_start_stopped_hw_queues(q, true);
> > + blk_mq_unquiesce_queue(q);
> > blk_mq_kick_requeue_list(q);
> > }
> >
> > diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> > index 04e115834702..231d36028afc 100644
> > --- a/drivers/nvme/host/core.c
> > +++ b/drivers/nvme/host/core.c
> > @@ -2514,7 +2514,7 @@ void nvme_start_queues(struct nvme_ctrl *ctrl)
> >
> > mutex_lock(&ctrl->namespaces_mutex);
> > list_for_each_entry(ns, &ctrl->namespaces, list) {
> > - blk_mq_start_stopped_hw_queues(ns->queue, true);
> > + blk_mq_unquiesce_queue(ns->queue);
> > blk_mq_kick_requeue_list(ns->queue);
> > }
> > mutex_unlock(&ctrl->namespaces_mutex);
> > diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
> > index 814a4bd8405d..72b11f75719c 100644
> > --- a/drivers/scsi/scsi_lib.c
> > +++ b/drivers/scsi/scsi_lib.c
> > @@ -3030,7 +3030,10 @@ scsi_internal_device_unblock(struct scsi_device *sdev,
> > return -EINVAL;
> >
> > if (q->mq_ops) {
> > - blk_mq_start_stopped_hw_queues(q, false);
> > + if (blk_queue_quiesced(q))
> > + blk_mq_unquiesce_queue(q);
>
> Calling this here, at this point means:
> blk_mq_start_stopped_hw_queues(q, true);
>
> Does it make a difference, given that before the code always calling
> blk_mq_start_stopped_hw_queues(q, false);
Good catch, it should have been:
if (blk_queue_quiesced(q))
blk_mq_unquiesce_queue(q);
else
blk_mq_start_stopped_hw_queues(q, false);
Thanks,
Ming
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 3/8] blk-mq: use the introduced blk_mq_unquiesce_queue()
2017-05-30 15:12 ` Bart Van Assche
@ 2017-05-31 2:29 ` Ming Lei
0 siblings, 0 replies; 5+ messages in thread
From: Ming Lei @ 2017-05-31 2:29 UTC (permalink / raw)
To: Bart Van Assche
Cc: hch@infradead.org, linux-block@vger.kernel.org, axboe@fb.com,
linux-scsi@vger.kernel.org, dm-devel@redhat.com,
linux-nvme@lists.infradead.org
On Tue, May 30, 2017 at 03:12:41PM +0000, Bart Van Assche wrote:
> On Sat, 2017-05-27 at 22:21 +0800, Ming Lei wrote:
> > --- a/drivers/scsi/scsi_lib.c
> > +++ b/drivers/scsi/scsi_lib.c
> > @@ -3030,7 +3030,10 @@ scsi_internal_device_unblock(struct scsi_device *sdev,
> > return -EINVAL;
> >
> > if (q->mq_ops) {
> > - blk_mq_start_stopped_hw_queues(q, false);
> > + if (blk_queue_quiesced(q))
> > + blk_mq_unquiesce_queue(q);
> > + else
> > + blk_mq_start_stopped_hw_queues(q, false);
> > } else {
> > spin_lock_irqsave(q->queue_lock, flags);
> > blk_start_queue(q);
>
> Hello Ming,
>
> Sorry but that change looks wrong to me. All what's needed here is a call
> to blk_mq_unquiesce_queue().
I think blk_mq_unquiesce_queue() should be called for case of queue
quiesced.
Thanks,
Ming
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-05-31 2:29 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20170527142126.26079-1-ming.lei@redhat.com>
2017-05-27 14:21 ` [PATCH v2 3/8] blk-mq: use the introduced blk_mq_unquiesce_queue() Ming Lei
2017-05-30 15:12 ` Bart Van Assche
2017-05-31 2:29 ` Ming Lei
2017-05-30 19:04 ` Eduardo Valentin
2017-05-31 2:28 ` Ming Lei
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox