Commit 496ba0d2 authored by Ben Walker's avatar Ben Walker Committed by Daniel Verkamp
Browse files

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: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/376417


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent b163dc02
Loading
Loading
Loading
Loading
+0 −14
Original line number Diff line number Diff line
@@ -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);
}

+0 −1
Original line number Diff line number Diff line
@@ -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;
+2 −24
Original line number Diff line number Diff line
@@ -272,19 +272,9 @@ spdk_nvmf_request_exec_on_master(void *ctx)
		SPDK_ERRLOG("Non-Fabric command sent to disabled controller\n");
		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);
	}
	}

	switch (status) {
	case SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE:
@@ -325,21 +315,9 @@ spdk_nvmf_request_exec(struct spdk_nvmf_request *req)
		SPDK_ERRLOG("Non-Fabric command sent to disabled controller\n");
		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);
	}
	}

	switch (status) {
	case SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE:
+1 −31
Original line number Diff line number Diff line
@@ -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);