nvme/rdma: fix double free in qpair creation error path
While we're here, fix up typos and add error logs for all error exits in nvme_rdma_qpair_connect(). Change-Id: I236fe6571c2012ca047aa8a447638d9227454c2f Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
parent
f19876b6c5
commit
be4f8d0562
@ -544,7 +544,7 @@ nvme_rdma_connect(struct nvme_rdma_qpair *rqpair)
|
|||||||
|
|
||||||
ret = rdma_connect(rqpair->cm_id, &conn_param);
|
ret = rdma_connect(rqpair->cm_id, &conn_param);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
SPDK_ERRLOG("nvme rdma connect eror");
|
SPDK_ERRLOG("nvme rdma connect error\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
ret = rdma_get_cm_event(rqpair->cm_channel, &event);
|
ret = rdma_get_cm_event(rqpair->cm_channel, &event);
|
||||||
@ -626,7 +626,8 @@ nvme_rdma_qpair_connect(struct nvme_rdma_qpair *rqpair)
|
|||||||
|
|
||||||
rc = nvmf_cm_construct(rqpair);
|
rc = nvmf_cm_construct(rqpair);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
return nvme_rdma_qpair_destroy(&rqpair->qpair);
|
SPDK_ERRLOG("nvmf_cm_construct() failed\n");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ctrlr = rqpair->qpair.ctrlr;
|
ctrlr = rqpair->qpair.ctrlr;
|
||||||
@ -635,28 +636,32 @@ nvme_rdma_qpair_connect(struct nvme_rdma_qpair *rqpair)
|
|||||||
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "trsvcid is %s\n", ctrlr->probe_info.trsvcid);
|
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "trsvcid is %s\n", ctrlr->probe_info.trsvcid);
|
||||||
rc = nvme_rdma_parse_addr(&sin, ctrlr->probe_info.traddr, ctrlr->probe_info.trsvcid);
|
rc = nvme_rdma_parse_addr(&sin, ctrlr->probe_info.traddr, ctrlr->probe_info.trsvcid);
|
||||||
if (rc != 0) {
|
if (rc != 0) {
|
||||||
goto err;
|
SPDK_ERRLOG("nvme_rdma_parse_addr() failed\n");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = rdma_create_id(rqpair->cm_channel, &rqpair->cm_id, rqpair, RDMA_PS_TCP);
|
rc = rdma_create_id(rqpair->cm_channel, &rqpair->cm_id, rqpair, RDMA_PS_TCP);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
goto err;
|
SPDK_ERRLOG("rdma_create_id() failed\n");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = nvme_rdma_bind_addr(rqpair, &sin, rqpair->cm_channel);
|
rc = nvme_rdma_bind_addr(rqpair, &sin, rqpair->cm_channel);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
goto err;
|
SPDK_ERRLOG("nvme_rdma_bind_addr() failed\n");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = nvme_rdma_qpair_init(rqpair);
|
rc = nvme_rdma_qpair_init(rqpair);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
goto err;
|
SPDK_ERRLOG("nvme_rdma_qpair_init() failed\n");
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
rc = nvme_rdma_alloc_reqs(rqpair);
|
rc = nvme_rdma_alloc_reqs(rqpair);
|
||||||
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "rc =%d\n", rc);
|
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "rc =%d\n", rc);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
SPDK_ERRLOG("Unable to allocate rqpair RDMA requests\n");
|
SPDK_ERRLOG("Unable to allocate rqpair RDMA requests\n");
|
||||||
goto err;
|
return -1;
|
||||||
}
|
}
|
||||||
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "RDMA requests allocated\n");
|
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "RDMA requests allocated\n");
|
||||||
|
|
||||||
@ -664,19 +669,17 @@ nvme_rdma_qpair_connect(struct nvme_rdma_qpair *rqpair)
|
|||||||
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "rc =%d\n", rc);
|
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "rc =%d\n", rc);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
SPDK_ERRLOG("Unable to allocate rqpair RDMA responses\n");
|
SPDK_ERRLOG("Unable to allocate rqpair RDMA responses\n");
|
||||||
goto err;
|
return -1;
|
||||||
}
|
}
|
||||||
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "RDMA responses allocated\n");
|
SPDK_TRACELOG(SPDK_TRACE_DEBUG, "RDMA responses allocated\n");
|
||||||
|
|
||||||
rc = nvme_rdma_connect(rqpair);
|
rc = nvme_rdma_connect(rqpair);
|
||||||
if (rc < 0) {
|
if (rc != 0) {
|
||||||
SPDK_ERRLOG("Unable to conduct the rqpair\n");
|
SPDK_ERRLOG("Unable to connect the rqpair\n");
|
||||||
goto err;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
err:
|
|
||||||
return nvme_rdma_qpair_destroy(&rqpair->qpair);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct spdk_nvme_rdma_req *
|
static struct spdk_nvme_rdma_req *
|
||||||
|
Loading…
Reference in New Issue
Block a user