[lkml]   [2017]   [Jun]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Patch in this message
Subject[PATCH 4.11 068/115] nvme: use blk_mq_start_hw_queues() in nvme_kill_queues()
4.11-stable review patch.  If anyone has any objections, please let me know.


From: Ming Lei <>

commit 806f026f9b901eaf1a6baeb48b5da18d6a4f818e upstream.

Inside nvme_kill_queues(), we have to start hw queues for
draining requests in sw queues, .dispatch list and requeue list,
so use blk_mq_start_hw_queues() instead of blk_mq_start_stopped_hw_queues()
which only run queues if queues are stopped, but the queues may have
been started already, for example nvme_start_queues() is called in reset work

blk_mq_start_hw_queues() run hw queues in current context, instead
of running asynchronously like before. Given nvme_kill_queues() is
run from either remove context or reset worker context, both are fine
to run hw queue directly. And the mutex of namespaces_mutex isn't a
problem too becasue nvme_start_freeze() runs hw queue in this way

Reported-by: Zhang Yi <>
Reviewed-by: Keith Busch <>
Reviewed-by: Johannes Thumshirn <>
Signed-off-by: Ming Lei <>
Signed-off-by: Christoph Hellwig <>
Signed-off-by: Greg Kroah-Hartman <>

drivers/nvme/host/core.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)

--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -2345,7 +2345,13 @@ void nvme_kill_queues(struct nvme_ctrl *
- blk_mq_start_stopped_hw_queues(ns->queue, true);
+ /*
+ * Forcibly start all queues to avoid having stuck requests.
+ * Note that we must ensure the queues are not stopped
+ * when the final removal happens.
+ */
+ blk_mq_start_hw_queues(ns->queue);

 \ /
  Last update: 2017-06-12 00:24    [W:0.385 / U:2.272 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site