Commit bee8c04a authored by Cunyin Chang's avatar Cunyin Chang Committed by Daniel Verkamp
Browse files

nvmf: Move the check of NVMe remove from session layer to subsystem layer.



Change-Id: Icf2f7122c9af0cd6420384c93813d2e79ed9c69e
Signed-off-by: default avatarCunyin Chang <cunyin.chang@intel.com>
parent 95487138
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -638,13 +638,6 @@ spdk_nvmf_session_poll(struct spdk_nvmf_session *session)
			SPDK_ERRLOG("Transport poll failed for conn %p; closing connection\n", conn);
			spdk_nvmf_session_disconnect(conn);
		}
		if (subsys->subtype == SPDK_NVMF_SUBTYPE_NVME) {
			if (subsys->is_removed && conn->transport->conn_is_idle(conn)) {
				if (subsys->ops->detach) {
					subsys->ops->detach(subsys);
				}
			}
		}
	}

	return 0;
+25 −0
Original line number Diff line number Diff line
@@ -128,6 +128,25 @@ spdk_nvmf_subsystem_start(struct spdk_nvmf_subsystem *subsystem)
	return subsystem->ops->attach(subsystem);
}

static bool
nvmf_subsystem_removable(struct spdk_nvmf_subsystem *subsystem)
{
	struct spdk_nvmf_session *session;
	struct spdk_nvmf_conn	*conn;

	if (subsystem->is_removed) {
		TAILQ_FOREACH(session, &subsystem->sessions, link) {
			TAILQ_FOREACH(conn, &session->connections, link) {
				if (!conn->transport->conn_is_idle(conn)) {
					return false;
				}
			}
		}
		return true;
	}
	return false;
}

void
spdk_nvmf_subsystem_poll(struct spdk_nvmf_subsystem *subsystem)
{
@@ -142,6 +161,12 @@ spdk_nvmf_subsystem_poll(struct spdk_nvmf_subsystem *subsystem)
		/* For each connection in the session, check for completions */
		spdk_nvmf_session_poll(session);
	}

	if (nvmf_subsystem_removable(subsystem)) {
		if (subsystem->ops->detach) {
			subsystem->ops->detach(subsystem);
		}
	}
}

static bool