mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 12:42:02 +00:00
nvme: wait until quiesce is done
NVMe uses one atomic flag to check if quiesce is needed. If quiesce is
started, the helper returns immediately. This way is wrong, since we
have to wait until quiesce is done.
Fixes: e70feb8b3e
("blk-mq: support concurrent queue quiesce/unquiesce")
Reviewed-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Link: https://lore.kernel.org/r/20211109071144.181581-5-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
93542fbfa7
commit
26af1cd003
@ -4476,6 +4476,8 @@ static void nvme_stop_ns_queue(struct nvme_ns *ns)
|
|||||||
{
|
{
|
||||||
if (!test_and_set_bit(NVME_NS_STOPPED, &ns->flags))
|
if (!test_and_set_bit(NVME_NS_STOPPED, &ns->flags))
|
||||||
blk_mq_quiesce_queue(ns->queue);
|
blk_mq_quiesce_queue(ns->queue);
|
||||||
|
else
|
||||||
|
blk_mq_wait_quiesce_done(ns->queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -4595,6 +4597,8 @@ void nvme_stop_admin_queue(struct nvme_ctrl *ctrl)
|
|||||||
{
|
{
|
||||||
if (!test_and_set_bit(NVME_CTRL_ADMIN_Q_STOPPED, &ctrl->flags))
|
if (!test_and_set_bit(NVME_CTRL_ADMIN_Q_STOPPED, &ctrl->flags))
|
||||||
blk_mq_quiesce_queue(ctrl->admin_q);
|
blk_mq_quiesce_queue(ctrl->admin_q);
|
||||||
|
else
|
||||||
|
blk_mq_wait_quiesce_done(ctrl->admin_q);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(nvme_stop_admin_queue);
|
EXPORT_SYMBOL_GPL(nvme_stop_admin_queue);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user