Loading lib/nvmf/rdma.c +36 −4 Original line number Diff line number Diff line Loading @@ -119,6 +119,10 @@ struct spdk_nvmf_rdma_conn { /* List of RDMA connections that have not yet received a CONNECT capsule */ static TAILQ_HEAD(, spdk_nvmf_rdma_conn) g_pending_conns = TAILQ_HEAD_INITIALIZER(g_pending_conns); struct spdk_nvmf_rdma_session { int reserved; }; struct spdk_nvmf_rdma { struct rte_timer acceptor_timer; struct rdma_event_channel *acceptor_event_channel; Loading Loading @@ -932,6 +936,35 @@ spdk_nvmf_rdma_acceptor_stop(void) rte_timer_stop_sync(&g_rdma.acceptor_timer); } static int spdk_nvmf_rdma_session_init(struct nvmf_session *session, struct spdk_nvmf_conn *conn) { struct spdk_nvmf_rdma_session *rdma_sess; rdma_sess = calloc(1, sizeof(*rdma_sess)); if (!rdma_sess) { return -1; } session->transport = conn->transport; session->trctx = rdma_sess; return 0; } static void spdk_nvmf_rdma_session_fini(struct nvmf_session *session) { struct spdk_nvmf_rdma_session *rdma_sess = session->trctx; if (!rdma_sess) { return; } free(rdma_sess); session->trctx = NULL; } /* Initialize with RDMA transport. Query OFED for device list. Loading Loading @@ -1081,10 +1114,6 @@ spdk_nvmf_rdma_poll(struct spdk_nvmf_conn *conn) break; case IBV_WC_RDMA_WRITE: /* * Will get this event only if we set IBV_SEND_SIGNALED * flag in rdma_write, to trace rdma write latency */ SPDK_TRACELOG(SPDK_TRACE_RDMA, "RDMA WRITE Complete. Request: %p Connection: %p\n", req, conn); spdk_trace_record(TRACE_RDMA_WRITE_COMPLETE, 0, 0, (uint64_t)req, 0); Loading Loading @@ -1169,6 +1198,9 @@ const struct spdk_nvmf_transport spdk_nvmf_transport_rdma = { .transport_start = spdk_nvmf_rdma_acceptor_start, .transport_stop = spdk_nvmf_rdma_acceptor_stop, .session_init = spdk_nvmf_rdma_session_init, .session_fini = spdk_nvmf_rdma_session_fini, .req_complete = spdk_nvmf_rdma_request_complete, .req_release = spdk_nvmf_rdma_request_release, Loading lib/nvmf/session.c +6 −0 Original line number Diff line number Diff line Loading @@ -174,6 +174,8 @@ spdk_nvmf_session_destruct(struct nvmf_session *session) conn->transport->conn_fini(conn); } session->transport->session_fini(session); free(session); } Loading Loading @@ -252,6 +254,10 @@ spdk_nvmf_session_connect(struct spdk_nvmf_conn *conn, session->num_connections = 0; session->subsys = subsystem; session->max_connections_allowed = g_nvmf_tgt.max_queues_per_session; if (conn->transport->session_init(session, conn)) { rsp->status.sc = SPDK_NVME_SC_INTERNAL_DEVICE_ERROR; return; } if (subsystem->subtype == SPDK_NVMF_SUBTYPE_NVME) { nvmf_init_nvme_session_properties(session); Loading lib/nvmf/session.h +6 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,12 @@ struct nvmf_session { TAILQ_HEAD(connection_q, spdk_nvmf_conn) connections; int num_connections; int max_connections_allowed; const struct spdk_nvmf_transport *transport; /* This is filled in by calling the transport's * session_init function. */ void *trctx; }; void spdk_nvmf_session_connect(struct spdk_nvmf_conn *conn, Loading lib/nvmf/transport.h +12 −0 Original line number Diff line number Diff line Loading @@ -36,7 +36,9 @@ #include <stdint.h> struct nvmf_session; struct spdk_nvmf_conn; struct spdk_nvmf_request; struct spdk_nvmf_discovery_log_page_entry; struct spdk_nvmf_listen_addr; struct spdk_nvmf_request; Loading Loading @@ -68,6 +70,16 @@ struct spdk_nvmf_transport { */ void (*transport_stop)(void); /** * Initialize the transport for the given session */ int (*session_init)(struct nvmf_session *session, struct spdk_nvmf_conn *conn); /** * Deinitiallize the transport for the given session */ void (*session_fini)(struct nvmf_session *session); /* * Signal request completion, which sends a response * to the originator. A request can either Loading Loading
lib/nvmf/rdma.c +36 −4 Original line number Diff line number Diff line Loading @@ -119,6 +119,10 @@ struct spdk_nvmf_rdma_conn { /* List of RDMA connections that have not yet received a CONNECT capsule */ static TAILQ_HEAD(, spdk_nvmf_rdma_conn) g_pending_conns = TAILQ_HEAD_INITIALIZER(g_pending_conns); struct spdk_nvmf_rdma_session { int reserved; }; struct spdk_nvmf_rdma { struct rte_timer acceptor_timer; struct rdma_event_channel *acceptor_event_channel; Loading Loading @@ -932,6 +936,35 @@ spdk_nvmf_rdma_acceptor_stop(void) rte_timer_stop_sync(&g_rdma.acceptor_timer); } static int spdk_nvmf_rdma_session_init(struct nvmf_session *session, struct spdk_nvmf_conn *conn) { struct spdk_nvmf_rdma_session *rdma_sess; rdma_sess = calloc(1, sizeof(*rdma_sess)); if (!rdma_sess) { return -1; } session->transport = conn->transport; session->trctx = rdma_sess; return 0; } static void spdk_nvmf_rdma_session_fini(struct nvmf_session *session) { struct spdk_nvmf_rdma_session *rdma_sess = session->trctx; if (!rdma_sess) { return; } free(rdma_sess); session->trctx = NULL; } /* Initialize with RDMA transport. Query OFED for device list. Loading Loading @@ -1081,10 +1114,6 @@ spdk_nvmf_rdma_poll(struct spdk_nvmf_conn *conn) break; case IBV_WC_RDMA_WRITE: /* * Will get this event only if we set IBV_SEND_SIGNALED * flag in rdma_write, to trace rdma write latency */ SPDK_TRACELOG(SPDK_TRACE_RDMA, "RDMA WRITE Complete. Request: %p Connection: %p\n", req, conn); spdk_trace_record(TRACE_RDMA_WRITE_COMPLETE, 0, 0, (uint64_t)req, 0); Loading Loading @@ -1169,6 +1198,9 @@ const struct spdk_nvmf_transport spdk_nvmf_transport_rdma = { .transport_start = spdk_nvmf_rdma_acceptor_start, .transport_stop = spdk_nvmf_rdma_acceptor_stop, .session_init = spdk_nvmf_rdma_session_init, .session_fini = spdk_nvmf_rdma_session_fini, .req_complete = spdk_nvmf_rdma_request_complete, .req_release = spdk_nvmf_rdma_request_release, Loading
lib/nvmf/session.c +6 −0 Original line number Diff line number Diff line Loading @@ -174,6 +174,8 @@ spdk_nvmf_session_destruct(struct nvmf_session *session) conn->transport->conn_fini(conn); } session->transport->session_fini(session); free(session); } Loading Loading @@ -252,6 +254,10 @@ spdk_nvmf_session_connect(struct spdk_nvmf_conn *conn, session->num_connections = 0; session->subsys = subsystem; session->max_connections_allowed = g_nvmf_tgt.max_queues_per_session; if (conn->transport->session_init(session, conn)) { rsp->status.sc = SPDK_NVME_SC_INTERNAL_DEVICE_ERROR; return; } if (subsystem->subtype == SPDK_NVMF_SUBTYPE_NVME) { nvmf_init_nvme_session_properties(session); Loading
lib/nvmf/session.h +6 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,12 @@ struct nvmf_session { TAILQ_HEAD(connection_q, spdk_nvmf_conn) connections; int num_connections; int max_connections_allowed; const struct spdk_nvmf_transport *transport; /* This is filled in by calling the transport's * session_init function. */ void *trctx; }; void spdk_nvmf_session_connect(struct spdk_nvmf_conn *conn, Loading
lib/nvmf/transport.h +12 −0 Original line number Diff line number Diff line Loading @@ -36,7 +36,9 @@ #include <stdint.h> struct nvmf_session; struct spdk_nvmf_conn; struct spdk_nvmf_request; struct spdk_nvmf_discovery_log_page_entry; struct spdk_nvmf_listen_addr; struct spdk_nvmf_request; Loading Loading @@ -68,6 +70,16 @@ struct spdk_nvmf_transport { */ void (*transport_stop)(void); /** * Initialize the transport for the given session */ int (*session_init)(struct nvmf_session *session, struct spdk_nvmf_conn *conn); /** * Deinitiallize the transport for the given session */ void (*session_fini)(struct nvmf_session *session); /* * Signal request completion, which sends a response * to the originator. A request can either Loading