aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSagi Grimberg <sagi@grimberg.me>2016-07-24 02:22:19 -0400
committerSagi Grimberg <sagi@grimberg.me>2016-08-03 09:25:16 -0400
commita34ca17a9717fe607cd58285a1704cb6526cf561 (patch)
tree311b034794a67e48d3fba1bb4f7e1ff3652ac4ce
parent2461a8dd38bea3cb5b1c1f0323794483292fb03f (diff)
nvme-rdma: Free the I/O tags when we delete the controller
If we wait until we free the controller (free_ctrl) we might lose our rdma device without any notification while we still have open resources (tags mrs and dma mappings). Instead, destroy the tags with their rdma resources once we delete the device and not when freeing it. Note that we don't do that in nvme_rdma_shutdown_ctrl because controller reset uses it as well and we want to give active I/O a chance to complete successfully. Signed-off-by: Sagi Grimberg <sagi@grimberg.me> Reviewed-by: Christoph Hellwig <hch@lst.de>
-rw-r--r--drivers/nvme/host/rdma.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c
index 1279bc292253..6378dc94aeaf 100644
--- a/drivers/nvme/host/rdma.c
+++ b/drivers/nvme/host/rdma.c
@@ -686,11 +686,6 @@ static void nvme_rdma_free_ctrl(struct nvme_ctrl *nctrl)
686 list_del(&ctrl->list); 686 list_del(&ctrl->list);
687 mutex_unlock(&nvme_rdma_ctrl_mutex); 687 mutex_unlock(&nvme_rdma_ctrl_mutex);
688 688
689 if (ctrl->ctrl.tagset) {
690 blk_cleanup_queue(ctrl->ctrl.connect_q);
691 blk_mq_free_tag_set(&ctrl->tag_set);
692 nvme_rdma_dev_put(ctrl->device);
693 }
694 kfree(ctrl->queues); 689 kfree(ctrl->queues);
695 nvmf_free_options(nctrl->opts); 690 nvmf_free_options(nctrl->opts);
696free_ctrl: 691free_ctrl:
@@ -1665,6 +1660,13 @@ static void __nvme_rdma_remove_ctrl(struct nvme_rdma_ctrl *ctrl, bool shutdown)
1665 nvme_uninit_ctrl(&ctrl->ctrl); 1660 nvme_uninit_ctrl(&ctrl->ctrl);
1666 if (shutdown) 1661 if (shutdown)
1667 nvme_rdma_shutdown_ctrl(ctrl); 1662 nvme_rdma_shutdown_ctrl(ctrl);
1663
1664 if (ctrl->ctrl.tagset) {
1665 blk_cleanup_queue(ctrl->ctrl.connect_q);
1666 blk_mq_free_tag_set(&ctrl->tag_set);
1667 nvme_rdma_dev_put(ctrl->device);
1668 }
1669
1668 nvme_put_ctrl(&ctrl->ctrl); 1670 nvme_put_ctrl(&ctrl->ctrl);
1669} 1671}
1670 1672