rdma: Fix qpair desctruction in error flow
rdma_qp may not be initialized when qpair is not fully created. When such a qpair is being destroyed we may pass a NULL pointer to spdk_rdma_qp_disconnect or spdk_rdma_qp_destroy and hit an assert. This patch fixes this problem for NVMEoF target and initiator. Change-Id: I84787dc1b1211293c2a19f59d47727eaecd9d5a1 Signed-off-by: Alexey Marchuk <alexeymar@mellanox.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3050 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
89013903fe
commit
8421f83973
@ -1815,17 +1815,17 @@ nvme_rdma_ctrlr_disconnect_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme
|
||||
}
|
||||
|
||||
if (rqpair->cm_id) {
|
||||
spdk_rdma_qp_disconnect(rqpair->rdma_qp);
|
||||
if (rctrlr != NULL) {
|
||||
if (nvme_rdma_process_event(rqpair, rctrlr->cm_channel, RDMA_CM_EVENT_DISCONNECTED)) {
|
||||
SPDK_DEBUGLOG(SPDK_LOG_NVME, "Target did not respond to qpair disconnect.\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (rqpair->rdma_qp) {
|
||||
spdk_rdma_qp_disconnect(rqpair->rdma_qp);
|
||||
if (rctrlr != NULL) {
|
||||
if (nvme_rdma_process_event(rqpair, rctrlr->cm_channel, RDMA_CM_EVENT_DISCONNECTED)) {
|
||||
SPDK_DEBUGLOG(SPDK_LOG_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;
|
||||
}
|
||||
|
@ -3566,7 +3566,7 @@ nvmf_rdma_close_qpair(struct spdk_nvmf_qpair *qpair)
|
||||
return;
|
||||
}
|
||||
|
||||
if (rqpair->cm_id) {
|
||||
if (rqpair->rdma_qp) {
|
||||
spdk_rdma_qp_disconnect(rqpair->rdma_qp);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user