projects
/
GitHub
/
LineageOS
/
G12
/
android_kernel_amlogic_linux-4.9.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
383f15e
)
nvme: fix hang in remove path
author
Ming Lei
<ming.lei@redhat.com>
Fri, 2 Jun 2017 08:32:08 +0000
(16:32 +0800)
committer
Greg Kroah-Hartman
<gregkh@linuxfoundation.org>
Fri, 13 Apr 2018 17:48:23 +0000
(19:48 +0200)
[ Upstream commit
82654b6b8ef8b93ee87a97fc562f87f081fc2f91
]
We need to start admin queues too in nvme_kill_queues()
for avoiding hang in remove path[1].
This patch is very similar with
806f026f9b901eaf
(nvme: use
blk_mq_start_hw_queues() in nvme_kill_queues()).
[1] hang stack trace
[<
ffffffff813c9716
>] blk_execute_rq+0x56/0x80
[<
ffffffff815cb6e9
>] __nvme_submit_sync_cmd+0x89/0xf0
[<
ffffffff815ce7be
>] nvme_set_features+0x5e/0x90
[<
ffffffff815ce9f6
>] nvme_configure_apst+0x166/0x200
[<
ffffffff815cef45
>] nvme_set_latency_tolerance+0x35/0x50
[<
ffffffff8157bd11
>] apply_constraint+0xb1/0xc0
[<
ffffffff8157cbb4
>] dev_pm_qos_constraints_destroy+0xf4/0x1f0
[<
ffffffff8157b44a
>] dpm_sysfs_remove+0x2a/0x60
[<
ffffffff8156d951
>] device_del+0x101/0x320
[<
ffffffff8156db8a
>] device_unregister+0x1a/0x60
[<
ffffffff8156dc4c
>] device_destroy+0x3c/0x50
[<
ffffffff815cd295
>] nvme_uninit_ctrl+0x45/0xa0
[<
ffffffff815d4858
>] nvme_remove+0x78/0x110
[<
ffffffff81452b69
>] pci_device_remove+0x39/0xb0
[<
ffffffff81572935
>] device_release_driver_internal+0x155/0x210
[<
ffffffff81572a02
>] device_release_driver+0x12/0x20
[<
ffffffff815d36fb
>] nvme_remove_dead_ctrl_work+0x6b/0x70
[<
ffffffff810bf3bc
>] process_one_work+0x18c/0x3a0
[<
ffffffff810bf61e
>] worker_thread+0x4e/0x3b0
[<
ffffffff810c5ac9
>] kthread+0x109/0x140
[<
ffffffff8185800c
>] ret_from_fork+0x2c/0x40
[<
ffffffffffffffff
>] 0xffffffffffffffff
Fixes:
c5552fde102fc
("nvme: Enable autonomous power state transitions")
Reported-by: Rakesh Pandit <rakesh@tuxera.com>
Tested-by: Rakesh Pandit <rakesh@tuxera.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/nvme/host/core.c
patch
|
blob
|
blame
|
history
diff --git
a/drivers/nvme/host/core.c
b/drivers/nvme/host/core.c
index ad9d82eb2aedda22dc7170c84b359f5df3401363..c823e9346389b33c6063eb871b5615b10ca53292 100644
(file)
--- a/
drivers/nvme/host/core.c
+++ b/
drivers/nvme/host/core.c
@@
-2040,6
+2040,10
@@
void nvme_kill_queues(struct nvme_ctrl *ctrl)
struct nvme_ns *ns;
mutex_lock(&ctrl->namespaces_mutex);
+
+ /* Forcibly start all queues to avoid having stuck requests */
+ blk_mq_start_hw_queues(ctrl->admin_q);
+
list_for_each_entry(ns, &ctrl->namespaces, list) {
/*
* Revalidating a dead namespace sets capacity to 0. This will