diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index 6159415c4..d98b1488e 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -542,20 +542,6 @@ spdk_nvmf_property_set(struct spdk_nvmf_ctrlr *ctrlr, int spdk_nvmf_ctrlr_poll(struct spdk_nvmf_ctrlr *ctrlr) { - struct spdk_nvmf_subsystem *subsys = ctrlr->subsys; - - if (subsys->is_removed) { - if (ctrlr->aer_req) { - struct spdk_nvmf_request *aer = ctrlr->aer_req; - - aer->rsp->nvme_cpl.status.sct = SPDK_NVME_SCT_GENERIC; - aer->rsp->nvme_cpl.status.sc = SPDK_NVME_SC_ABORTED_SQ_DELETION; - aer->rsp->nvme_cpl.status.dnr = 0; - spdk_nvmf_request_complete(aer); - ctrlr->aer_req = NULL; - } - } - return spdk_nvmf_poll_group_poll(ctrlr->group); } diff --git a/lib/nvmf/nvmf_internal.h b/lib/nvmf/nvmf_internal.h index b08c82704..4f48128aa 100644 --- a/lib/nvmf/nvmf_internal.h +++ b/lib/nvmf/nvmf_internal.h @@ -175,7 +175,6 @@ struct spdk_nvmf_subsystem { uint32_t id; char subnqn[SPDK_NVMF_NQN_MAX_LEN + 1]; enum spdk_nvmf_subtype subtype; - bool is_removed; bool allow_any_host; struct spdk_nvmf_tgt *tgt; diff --git a/lib/nvmf/request.c b/lib/nvmf/request.c index 18ef4283b..010630dfc 100644 --- a/lib/nvmf/request.c +++ b/lib/nvmf/request.c @@ -273,17 +273,7 @@ spdk_nvmf_request_exec_on_master(void *ctx) rsp->status.sc = SPDK_NVME_SC_COMMAND_SEQUENCE_ERROR; status = SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; } else { - struct spdk_nvmf_subsystem *subsystem; - - subsystem = ctrlr->subsys; - assert(subsystem != NULL); - - if (subsystem->is_removed) { - rsp->status.sc = SPDK_NVME_SC_ABORTED_BY_REQUEST; - status = SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; - } else { - status = spdk_nvmf_ctrlr_process_admin_cmd(req); - } + status = spdk_nvmf_ctrlr_process_admin_cmd(req); } switch (status) { @@ -326,19 +316,7 @@ spdk_nvmf_request_exec(struct spdk_nvmf_request *req) rsp->status.sc = SPDK_NVME_SC_COMMAND_SEQUENCE_ERROR; status = SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; } else { - struct spdk_nvmf_subsystem *subsystem = ctrlr->subsys; - - assert(subsystem != NULL); - - /* TODO: subsystem->is_removed is touched by multiple threads. - * This needs stronger synchronization. - */ - if (subsystem->is_removed) { - rsp->status.sc = SPDK_NVME_SC_ABORTED_BY_REQUEST; - status = SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; - } else { - status = spdk_nvmf_ctrlr_process_io_cmd(req); - } + status = spdk_nvmf_ctrlr_process_io_cmd(req); } switch (status) { diff --git a/lib/nvmf/subsystem.c b/lib/nvmf/subsystem.c index f6dc7badf..9a272b130 100644 --- a/lib/nvmf/subsystem.c +++ b/lib/nvmf/subsystem.c @@ -50,25 +50,6 @@ spdk_nvmf_subsystem_start(struct spdk_nvmf_subsystem *subsystem) return spdk_nvmf_subsystem_bdev_attach(subsystem); } -static bool -nvmf_subsystem_removable(struct spdk_nvmf_subsystem *subsystem) -{ - struct spdk_nvmf_ctrlr *ctrlr; - struct spdk_nvmf_qpair *qpair; - - if (subsystem->is_removed) { - TAILQ_FOREACH(ctrlr, &subsystem->ctrlrs, link) { - TAILQ_FOREACH(qpair, &ctrlr->qpairs, link) { - if (!spdk_nvmf_transport_qpair_is_idle(qpair)) { - return false; - } - } - } - return true; - } - return false; -} - void spdk_nvmf_subsystem_poll(struct spdk_nvmf_subsystem *subsystem) { @@ -78,10 +59,6 @@ spdk_nvmf_subsystem_poll(struct spdk_nvmf_subsystem *subsystem) /* For each connection in the ctrlr, check for completions */ spdk_nvmf_ctrlr_poll(ctrlr); } - - if (nvmf_subsystem_removable(subsystem)) { - spdk_nvmf_subsystem_bdev_detach(subsystem); - } } static bool @@ -338,13 +315,6 @@ spdk_nvmf_listener_get_trid(struct spdk_nvmf_listener *listener) return &listener->trid; } -static void spdk_nvmf_ctrlr_hot_remove(void *remove_ctx) -{ - struct spdk_nvmf_subsystem *subsystem = (struct spdk_nvmf_subsystem *)remove_ctx; - - subsystem->is_removed = true; -} - uint32_t spdk_nvmf_subsystem_add_ns(struct spdk_nvmf_subsystem *subsystem, struct spdk_bdev *bdev, uint32_t nsid) @@ -405,7 +375,7 @@ spdk_nvmf_subsystem_add_ns(struct spdk_nvmf_subsystem *subsystem, struct spdk_bd memset(ns, 0, sizeof(*ns)); ns->bdev = bdev; ns->id = nsid; - rc = spdk_bdev_open(bdev, true, spdk_nvmf_ctrlr_hot_remove, subsystem, &ns->desc); + rc = spdk_bdev_open(bdev, true, NULL, NULL, &ns->desc); if (rc != 0) { SPDK_ERRLOG("Subsystem %s: bdev %s cannot be opened, error=%d\n", subsystem->subnqn, spdk_bdev_get_name(bdev), rc);