From 496ba0d273283f21d28fa8833527170fd74f6564 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Tue, 29 Aug 2017 14:43:30 -0700 Subject: [PATCH] nvmf: Temporarily remove hot plug support The current hot plug support assumes only one thread can access a subsystem at a time, but now that we're changing that this will need to be reworked. In the interest of making it easier to change the threading model, remove hot plug support temporarily. We'll add it back in once the threading model changes are done. Change-Id: I15b75b402b85aa62f5ba864a64cde1de3cdb4ba3 Signed-off-by: Ben Walker Reviewed-on: https://review.gerrithub.io/376417 Tested-by: SPDK Automated Test System Reviewed-by: Jim Harris --- lib/nvmf/ctrlr.c | 14 -------------- lib/nvmf/nvmf_internal.h | 1 - lib/nvmf/request.c | 26 ++------------------------ lib/nvmf/subsystem.c | 32 +------------------------------- 4 files changed, 3 insertions(+), 70 deletions(-) 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);