nvmf: update nvmf_disconnect to spdk_nvmf_session_disconnect

1 Rename this function and make it more meaninful, since
we have spdk_nvmf_session_connect which is used to link a
connection to the session
2 split spdk_nvmf_session_destruct.

Change-Id: I150df7ccdf4de3428d8cecbb286d5f7944510a8c
Signed-off-by: Ziye Yang <ziye.yang@intel.com>
This commit is contained in:
Ziye Yang 2016-09-12 13:13:12 +08:00 committed by Daniel Verkamp
parent b3ca958328
commit 6a6ef0d7e0
5 changed files with 18 additions and 17 deletions

View File

@ -172,7 +172,7 @@ disconnect_event(struct spdk_event *event)
{ {
struct spdk_nvmf_conn *conn = spdk_event_get_arg1(event); struct spdk_nvmf_conn *conn = spdk_event_get_arg1(event);
spdk_nvmf_handle_disconnect(conn); spdk_nvmf_session_disconnect(conn);
} }
static void static void

View File

@ -156,11 +156,16 @@ nvmf_init_nvme_session_properties(struct nvmf_session *session)
session->vcprop.csts.raw); session->vcprop.csts.raw);
} }
static void session_destruct(struct nvmf_session *session)
{
session->subsys->session = NULL;
session->transport->session_fini(session);
free(session);
}
void void
spdk_nvmf_session_destruct(struct nvmf_session *session) spdk_nvmf_session_destruct(struct nvmf_session *session)
{ {
session->subsys->session = NULL;
while (!TAILQ_EMPTY(&session->connections)) { while (!TAILQ_EMPTY(&session->connections)) {
struct spdk_nvmf_conn *conn = TAILQ_FIRST(&session->connections); struct spdk_nvmf_conn *conn = TAILQ_FIRST(&session->connections);
@ -169,9 +174,7 @@ spdk_nvmf_session_destruct(struct nvmf_session *session)
conn->transport->conn_fini(conn); conn->transport->conn_fini(conn);
} }
session->transport->session_fini(session); session_destruct(session);
free(session);
} }
static void static void
@ -327,16 +330,17 @@ spdk_nvmf_session_connect(struct spdk_nvmf_conn *conn,
} }
void void
spdk_nvmf_handle_disconnect(struct spdk_nvmf_conn *conn) spdk_nvmf_session_disconnect(struct spdk_nvmf_conn *conn)
{ {
struct nvmf_session *session = conn->sess; struct nvmf_session *session = conn->sess;
assert(session != NULL);
session->num_connections--; session->num_connections--;
TAILQ_REMOVE(&session->connections, conn, link); TAILQ_REMOVE(&session->connections, conn, link);
conn->transport->conn_fini(conn); conn->transport->conn_fini(conn);
if (session->num_connections == 0) { if (session->num_connections == 0) {
spdk_nvmf_session_destruct(session); session_destruct(session);
} }
} }
@ -556,7 +560,7 @@ spdk_nvmf_session_poll(struct nvmf_session *session)
TAILQ_FOREACH_SAFE(conn, &session->connections, link, tmp) { TAILQ_FOREACH_SAFE(conn, &session->connections, link, tmp) {
if (conn->transport->conn_poll(conn) < 0) { if (conn->transport->conn_poll(conn) < 0) {
SPDK_ERRLOG("Transport poll failed for conn %p; closing connection\n", conn); SPDK_ERRLOG("Transport poll failed for conn %p; closing connection\n", conn);
spdk_nvmf_handle_disconnect(conn); spdk_nvmf_session_disconnect(conn);
} }
} }

View File

@ -93,7 +93,8 @@ void spdk_nvmf_session_connect(struct spdk_nvmf_conn *conn,
struct spdk_nvmf_fabric_connect_data *data, struct spdk_nvmf_fabric_connect_data *data,
struct spdk_nvmf_fabric_connect_rsp *rsp); struct spdk_nvmf_fabric_connect_rsp *rsp);
void spdk_nvmf_handle_disconnect(struct spdk_nvmf_conn *conn); void
spdk_nvmf_session_disconnect(struct spdk_nvmf_conn *conn);
void void
nvmf_property_get(struct nvmf_session *session, nvmf_property_get(struct nvmf_session *session,

View File

@ -964,15 +964,11 @@ nvmf_test_disconnect(void)
struct spdk_nvmf_subsystem *subsystem; struct spdk_nvmf_subsystem *subsystem;
sess = nvmf_find_session_by_id("subsystem1", SS_SC_CNTLID); sess = nvmf_find_session_by_id("subsystem1", SS_SC_CNTLID);
/* delete non-exist connection */
nvmf_disconnect((void *)6, sess);
/* we have two connections admin and io */
CU_ASSERT_EQUAL(sess->num_connections, 2);
/* delete IO connection */ /* delete IO connection */
nvmf_disconnect((void *)fabric_conn_IO, sess); spdk_nvmf_session_disconnect((void *)fabric_conn_IO);
CU_ASSERT_EQUAL(sess->num_connections, 1); CU_ASSERT_EQUAL(sess->num_connections, 1);
/* delete admin connection */ /* delete admin connection */
nvmf_disconnect((void *)fabric_conn_admin, sess); spdk_nvmf_session_disconnect((void *)fabric_conn_admin);
subsystem = nvmf_find_subsystem("subsystem1"); subsystem = nvmf_find_subsystem("subsystem1");
CU_ASSERT_EQUAL(subsystem->num_sessions, 0); CU_ASSERT_EQUAL(subsystem->num_sessions, 0);
} }

View File

@ -111,7 +111,7 @@ struct spdk_nvme_ns *spdk_nvme_ctrlr_get_ns(struct spdk_nvme_ctrlr *ctrlr, uint3
} }
void void
spdk_nvmf_handle_disconnect(struct spdk_nvmf_conn *conn) spdk_nvmf_session_disconnect(struct spdk_nvmf_conn *conn)
{ {
} }