|
@@ -17,6 +17,7 @@
|
|
|
#include "nvmet.h"
|
|
|
|
|
|
static struct nvmet_fabrics_ops *nvmet_transports[NVMF_TRTYPE_MAX];
|
|
|
+static DEFINE_IDA(cntlid_ida);
|
|
|
|
|
|
/*
|
|
|
* This read/write semaphore is used to synchronize access to configuration
|
|
@@ -749,7 +750,7 @@ u16 nvmet_alloc_ctrl(const char *subsysnqn, const char *hostnqn,
|
|
|
if (!ctrl->sqs)
|
|
|
goto out_free_cqs;
|
|
|
|
|
|
- ret = ida_simple_get(&subsys->cntlid_ida,
|
|
|
+ ret = ida_simple_get(&cntlid_ida,
|
|
|
NVME_CNTLID_MIN, NVME_CNTLID_MAX,
|
|
|
GFP_KERNEL);
|
|
|
if (ret < 0) {
|
|
@@ -819,7 +820,7 @@ static void nvmet_ctrl_free(struct kref *ref)
|
|
|
flush_work(&ctrl->async_event_work);
|
|
|
cancel_work_sync(&ctrl->fatal_err_work);
|
|
|
|
|
|
- ida_simple_remove(&subsys->cntlid_ida, ctrl->cntlid);
|
|
|
+ ida_simple_remove(&cntlid_ida, ctrl->cntlid);
|
|
|
nvmet_subsys_put(subsys);
|
|
|
|
|
|
kfree(ctrl->sqs);
|
|
@@ -918,9 +919,6 @@ struct nvmet_subsys *nvmet_subsys_alloc(const char *subsysnqn,
|
|
|
mutex_init(&subsys->lock);
|
|
|
INIT_LIST_HEAD(&subsys->namespaces);
|
|
|
INIT_LIST_HEAD(&subsys->ctrls);
|
|
|
-
|
|
|
- ida_init(&subsys->cntlid_ida);
|
|
|
-
|
|
|
INIT_LIST_HEAD(&subsys->hosts);
|
|
|
|
|
|
return subsys;
|
|
@@ -933,7 +931,6 @@ static void nvmet_subsys_free(struct kref *ref)
|
|
|
|
|
|
WARN_ON_ONCE(!list_empty(&subsys->namespaces));
|
|
|
|
|
|
- ida_destroy(&subsys->cntlid_ida);
|
|
|
kfree(subsys->subsysnqn);
|
|
|
kfree(subsys);
|
|
|
}
|
|
@@ -976,6 +973,7 @@ static void __exit nvmet_exit(void)
|
|
|
{
|
|
|
nvmet_exit_configfs();
|
|
|
nvmet_exit_discovery();
|
|
|
+ ida_destroy(&cntlid_ida);
|
|
|
|
|
|
BUILD_BUG_ON(sizeof(struct nvmf_disc_rsp_page_entry) != 1024);
|
|
|
BUILD_BUG_ON(sizeof(struct nvmf_disc_rsp_page_hdr) != 1024);
|