nvmf/rdma: fix bugs in spdk_nvmf_rdma_qpair_destroy
Rqpair qp and resources maybe not be created, if rqpair fail to initialise. For example, in function new_qpair, the code run to spdk_nvmf_qpair_disconnect, but rqpair is initialised in poll_group_add. Fix #557 segmentaion fault(core dump) Change-Id: I1892e6d13e2d53dd5a7c4856d775f9b3b85da961 Signed-off-by: JinYu <jin.yu@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/450986 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Seth Howell <seth.howell5141@gmail.com> Reviewed-by: Hailiang Wang <hailiangx.e.wang@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
e1112c7a49
commit
dd90ff7a21
@ -863,7 +863,7 @@ spdk_nvmf_rdma_qpair_destroy(struct spdk_nvmf_rdma_qpair *rqpair)
|
|||||||
if (rqpair->poller) {
|
if (rqpair->poller) {
|
||||||
TAILQ_REMOVE(&rqpair->poller->qpairs, rqpair, link);
|
TAILQ_REMOVE(&rqpair->poller->qpairs, rqpair, link);
|
||||||
|
|
||||||
if (rqpair->srq != NULL) {
|
if (rqpair->srq != NULL && rqpair->resources != NULL) {
|
||||||
/* Drop all received but unprocessed commands for this queue and return them to SRQ */
|
/* Drop all received but unprocessed commands for this queue and return them to SRQ */
|
||||||
STAILQ_FOREACH_SAFE(rdma_recv, &rqpair->resources->incoming_queue, link, recv_tmp) {
|
STAILQ_FOREACH_SAFE(rdma_recv, &rqpair->resources->incoming_queue, link, recv_tmp) {
|
||||||
if (rqpair == rdma_recv->qpair) {
|
if (rqpair == rdma_recv->qpair) {
|
||||||
@ -878,7 +878,9 @@ spdk_nvmf_rdma_qpair_destroy(struct spdk_nvmf_rdma_qpair *rqpair)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (rqpair->cm_id) {
|
if (rqpair->cm_id) {
|
||||||
|
if (rqpair->cm_id->qp != NULL) {
|
||||||
rdma_destroy_qp(rqpair->cm_id);
|
rdma_destroy_qp(rqpair->cm_id);
|
||||||
|
}
|
||||||
rdma_destroy_id(rqpair->cm_id);
|
rdma_destroy_id(rqpair->cm_id);
|
||||||
|
|
||||||
if (rqpair->poller != NULL && rqpair->srq == NULL) {
|
if (rqpair->poller != NULL && rqpair->srq == NULL) {
|
||||||
@ -886,7 +888,7 @@ spdk_nvmf_rdma_qpair_destroy(struct spdk_nvmf_rdma_qpair *rqpair)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rqpair->srq == NULL) {
|
if (rqpair->srq == NULL && rqpair->resources != NULL) {
|
||||||
nvmf_rdma_resources_destroy(rqpair->resources);
|
nvmf_rdma_resources_destroy(rqpair->resources);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user