* [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-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
* 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
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