Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 148b4e7f authored by Sagi Grimberg's avatar Sagi Grimberg
Browse files

nvme-rdma: stop queues instead of simply flipping their state



If we move the queues from LIVE state, we might as well stop them (drain
for rdma).  Do it after we stop the request queues to prevent a stray
request sneaking in .queue_rq after we stop the queue.

Signed-off-by: default avatarSagi Grimberg <sagi@grimberg.me>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent a57bd541
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -945,16 +945,15 @@ static void nvme_rdma_error_recovery_work(struct work_struct *work)
{
	struct nvme_rdma_ctrl *ctrl = container_of(work,
			struct nvme_rdma_ctrl, err_work);
	int i;

	nvme_stop_ctrl(&ctrl->ctrl);

	for (i = 0; i < ctrl->ctrl.queue_count; i++)
		clear_bit(NVME_RDMA_Q_LIVE, &ctrl->queues[i].flags);

	if (ctrl->ctrl.queue_count > 1)
	if (ctrl->ctrl.queue_count > 1) {
		nvme_stop_queues(&ctrl->ctrl);
		nvme_rdma_stop_io_queues(ctrl);
	}
	blk_mq_quiesce_queue(ctrl->ctrl.admin_q);
	nvme_rdma_stop_queue(&ctrl->queues[0]);

	/* We must take care of fastfail/requeue all our inflight requests */
	if (ctrl->ctrl.queue_count > 1)