summaryrefslogtreecommitdiffstats
path: root/drivers/nvme/target/core.c
diff options
context:
space:
mode:
authorSagi Grimberg2016-11-27 21:29:17 +0100
committerSagi Grimberg2017-01-26 16:44:22 +0100
commit344770b07b7ae70639ebf110010eb6156a6e55e9 (patch)
treeaa5faa36d1b44a5a3cf511caa336dfe7f1f7f8df /drivers/nvme/target/core.c
parentnvmet_fc: correct logic in disconnect queue LS handling (diff)
downloadkernel-qcow2-linux-344770b07b7ae70639ebf110010eb6156a6e55e9.tar.gz
kernel-qcow2-linux-344770b07b7ae70639ebf110010eb6156a6e55e9.tar.xz
kernel-qcow2-linux-344770b07b7ae70639ebf110010eb6156a6e55e9.zip
nvmet: delete controllers deletion upon subsystem release
No reason for them to be kept around if we are deleting the subsystem, so instead of passively wait for the host to disconnect, actively delete the controllers. Signed-off-by: Sagi Grimberg <sagi@grimberg.me> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Reviewed-by: Max Gurtovoy <maxg@mellanox.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'drivers/nvme/target/core.c')
-rw-r--r--drivers/nvme/target/core.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c
index b1d66ed655c9..4a367549eb93 100644
--- a/drivers/nvme/target/core.c
+++ b/drivers/nvme/target/core.c
@@ -935,6 +935,16 @@ static void nvmet_subsys_free(struct kref *ref)
kfree(subsys);
}
+void nvmet_subsys_del_ctrls(struct nvmet_subsys *subsys)
+{
+ struct nvmet_ctrl *ctrl;
+
+ mutex_lock(&subsys->lock);
+ list_for_each_entry(ctrl, &subsys->ctrls, subsys_entry)
+ ctrl->ops->delete_ctrl(ctrl);
+ mutex_unlock(&subsys->lock);
+}
+
void nvmet_subsys_put(struct nvmet_subsys *subsys)
{
kref_put(&subsys->ref, nvmet_subsys_free);