nvme_rdma: Make CM event operations callback functions
Change-Id: I9f2551a07187400dd9ef624348cd465e64557e1b Signed-off-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11138 Community-CI: Mellanox Build Bot Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
e5927c02e9
commit
bcf0845727
@ -1077,21 +1077,28 @@ fail:
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
static int
|
||||
nvme_rdma_resolve_addr(struct nvme_rdma_qpair *rqpair,
|
||||
struct sockaddr *src_addr,
|
||||
struct sockaddr *dst_addr)
|
||||
{
|
||||
int ret;
|
||||
static int nvme_rdma_connect(struct nvme_rdma_qpair *rqpair);
|
||||
|
||||
ret = rdma_resolve_addr(rqpair->cm_id, src_addr, dst_addr,
|
||||
NVME_RDMA_TIME_OUT_IN_MS);
|
||||
static int
|
||||
nvme_rdma_route_resolved(struct nvme_rdma_qpair *rqpair, int ret)
|
||||
{
|
||||
if (ret) {
|
||||
SPDK_ERRLOG("rdma_resolve_addr, %d\n", errno);
|
||||
return ret;
|
||||
SPDK_ERRLOG("RDMA route resolution error\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = nvme_rdma_process_event(rqpair, RDMA_CM_EVENT_ADDR_RESOLVED);
|
||||
ret = nvme_rdma_qpair_init(rqpair);
|
||||
if (ret < 0) {
|
||||
SPDK_ERRLOG("nvme_rdma_qpair_init() failed\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return nvme_rdma_connect(rqpair);
|
||||
}
|
||||
|
||||
static int
|
||||
nvme_rdma_addr_resolved(struct nvme_rdma_qpair *rqpair, int ret)
|
||||
{
|
||||
if (ret) {
|
||||
SPDK_ERRLOG("RDMA address resolution error\n");
|
||||
return -1;
|
||||
@ -1111,7 +1118,6 @@ nvme_rdma_resolve_addr(struct nvme_rdma_qpair *rqpair,
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
ret = rdma_resolve_route(rqpair->cm_id, NVME_RDMA_TIME_OUT_IN_MS);
|
||||
if (ret) {
|
||||
SPDK_ERRLOG("rdma_resolve_route\n");
|
||||
@ -1119,10 +1125,61 @@ nvme_rdma_resolve_addr(struct nvme_rdma_qpair *rqpair,
|
||||
}
|
||||
|
||||
ret = nvme_rdma_process_event(rqpair, RDMA_CM_EVENT_ROUTE_RESOLVED);
|
||||
|
||||
return nvme_rdma_route_resolved(rqpair, ret);
|
||||
}
|
||||
|
||||
static int
|
||||
nvme_rdma_resolve_addr(struct nvme_rdma_qpair *rqpair,
|
||||
struct sockaddr *src_addr,
|
||||
struct sockaddr *dst_addr)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = rdma_resolve_addr(rqpair->cm_id, src_addr, dst_addr,
|
||||
NVME_RDMA_TIME_OUT_IN_MS);
|
||||
if (ret) {
|
||||
SPDK_ERRLOG("RDMA route resolution error\n");
|
||||
SPDK_ERRLOG("rdma_resolve_addr, %d\n", errno);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = nvme_rdma_process_event(rqpair, RDMA_CM_EVENT_ADDR_RESOLVED);
|
||||
|
||||
return nvme_rdma_addr_resolved(rqpair, ret);
|
||||
}
|
||||
|
||||
static int
|
||||
nvme_rdma_connect_established(struct nvme_rdma_qpair *rqpair, int ret)
|
||||
{
|
||||
if (ret) {
|
||||
SPDK_ERRLOG("RDMA connect error %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = nvme_rdma_register_reqs(rqpair);
|
||||
SPDK_DEBUGLOG(nvme, "rc =%d\n", ret);
|
||||
if (ret) {
|
||||
SPDK_ERRLOG("Unable to register rqpair RDMA requests\n");
|
||||
return -1;
|
||||
}
|
||||
SPDK_DEBUGLOG(nvme, "RDMA requests registered\n");
|
||||
|
||||
ret = nvme_rdma_register_rsps(rqpair);
|
||||
SPDK_DEBUGLOG(nvme, "rc =%d\n", ret);
|
||||
if (ret < 0) {
|
||||
SPDK_ERRLOG("Unable to register rqpair RDMA responses\n");
|
||||
return -1;
|
||||
}
|
||||
SPDK_DEBUGLOG(nvme, "RDMA responses registered\n");
|
||||
|
||||
rqpair->mr_map = spdk_rdma_create_mem_map(rqpair->rdma_qp->qp->pd, &g_nvme_hooks,
|
||||
SPDK_RDMA_MEMORY_MAP_ROLE_INITIATOR);
|
||||
if (!rqpair->mr_map) {
|
||||
SPDK_ERRLOG("Unable to register RDMA memory translation map\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
rqpair->state = NVME_RDMA_QPAIR_STATE_FABRIC_CONNECT_SEND;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1170,7 +1227,9 @@ nvme_rdma_connect(struct nvme_rdma_qpair *rqpair)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return nvme_rdma_process_event(rqpair, RDMA_CM_EVENT_ESTABLISHED);
|
||||
ret = nvme_rdma_process_event(rqpair, RDMA_CM_EVENT_ESTABLISHED);
|
||||
|
||||
return nvme_rdma_connect_established(rqpair, ret);
|
||||
}
|
||||
|
||||
static int
|
||||
@ -1266,43 +1325,6 @@ nvme_rdma_ctrlr_connect_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qp
|
||||
return -1;
|
||||
}
|
||||
|
||||
rc = nvme_rdma_qpair_init(rqpair);
|
||||
if (rc < 0) {
|
||||
SPDK_ERRLOG("nvme_rdma_qpair_init() failed\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
rc = nvme_rdma_connect(rqpair);
|
||||
if (rc != 0) {
|
||||
SPDK_ERRLOG("Unable to connect the rqpair\n");
|
||||
return rc;
|
||||
}
|
||||
|
||||
rc = nvme_rdma_register_reqs(rqpair);
|
||||
SPDK_DEBUGLOG(nvme, "rc =%d\n", rc);
|
||||
if (rc) {
|
||||
SPDK_ERRLOG("Unable to register rqpair RDMA requests\n");
|
||||
return -1;
|
||||
}
|
||||
SPDK_DEBUGLOG(nvme, "RDMA requests registered\n");
|
||||
|
||||
rc = nvme_rdma_register_rsps(rqpair);
|
||||
SPDK_DEBUGLOG(nvme, "rc =%d\n", rc);
|
||||
if (rc < 0) {
|
||||
SPDK_ERRLOG("Unable to register rqpair RDMA responses\n");
|
||||
return -1;
|
||||
}
|
||||
SPDK_DEBUGLOG(nvme, "RDMA responses registered\n");
|
||||
|
||||
rqpair->mr_map = spdk_rdma_create_mem_map(rqpair->rdma_qp->qp->pd, &g_nvme_hooks,
|
||||
SPDK_RDMA_MEMORY_MAP_ROLE_INITIATOR);
|
||||
if (!rqpair->mr_map) {
|
||||
SPDK_ERRLOG("Unable to register RDMA memory translation map\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
rqpair->state = NVME_RDMA_QPAIR_STATE_FABRIC_CONNECT_SEND;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1802,6 +1824,29 @@ nvme_rdma_ctrlr_create_qpair(struct spdk_nvme_ctrlr *ctrlr,
|
||||
return qpair;
|
||||
}
|
||||
|
||||
static int
|
||||
nvme_rdma_qpair_disconnected(struct nvme_rdma_qpair *rqpair, int ret)
|
||||
{
|
||||
if (rqpair->cm_id) {
|
||||
if (rqpair->rdma_qp) {
|
||||
spdk_rdma_qp_destroy(rqpair->rdma_qp);
|
||||
rqpair->rdma_qp = NULL;
|
||||
}
|
||||
|
||||
rdma_destroy_id(rqpair->cm_id);
|
||||
rqpair->cm_id = NULL;
|
||||
}
|
||||
|
||||
if (rqpair->cq) {
|
||||
ibv_destroy_cq(rqpair->cq);
|
||||
rqpair->cq = NULL;
|
||||
}
|
||||
|
||||
nvme_transport_ctrlr_disconnect_qpair_done(&rqpair->qpair);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
nvme_rdma_ctrlr_disconnect_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpair *qpair)
|
||||
{
|
||||
@ -1842,20 +1887,10 @@ nvme_rdma_ctrlr_disconnect_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme
|
||||
SPDK_DEBUGLOG(nvme, "Target did not respond to qpair disconnect.\n");
|
||||
}
|
||||
}
|
||||
spdk_rdma_qp_destroy(rqpair->rdma_qp);
|
||||
rqpair->rdma_qp = NULL;
|
||||
}
|
||||
|
||||
rdma_destroy_id(rqpair->cm_id);
|
||||
rqpair->cm_id = NULL;
|
||||
}
|
||||
|
||||
if (rqpair->cq) {
|
||||
ibv_destroy_cq(rqpair->cq);
|
||||
rqpair->cq = NULL;
|
||||
}
|
||||
|
||||
nvme_transport_ctrlr_disconnect_qpair_done(qpair);
|
||||
nvme_rdma_qpair_disconnected(rqpair, 0);
|
||||
}
|
||||
|
||||
static void nvme_rdma_qpair_abort_reqs(struct spdk_nvme_qpair *qpair, uint32_t dnr);
|
||||
|
Loading…
Reference in New Issue
Block a user