Permalink
Browse files

rpc: fix a routine to destory RDMA qp(queue-pair)

Problem: If an error has occured with rdma_create_id() in gf_rdma_connect(),
         process will jump to the 'unlock' label and then call gf_rdma_teardown()
         which call __gf_rdma_teardown().
         Presently, __gf_rdma_teardown() checks InifiniBand QP with peer->cm_id->qp!
         Unfortunately, cm_id is not allocated and will be crushed in this situation :)

Solution: If 'this->private->peer->cm_id' member is null, do not check
          'this->private->peer->cm_id->qp'.

Change-Id: Ie321b8cf175ef4f1bdd9733d73840f03ddff8c3b
BUG: 1449495
Signed-off-by: Ji-Hyeon Gim <potatogim@potatogim.net>
Reviewed-on: https://review.gluster.org/17249
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Reviewed-by: Prashanth Pai <ppai@redhat.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Tested-by: Ji-Hyeon Gim
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Smoke: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Jeff Darcy <jeff@pl.atyp.us>
  • Loading branch information...
1 parent 1a8fa91 commit ccfa06767f1282d9a3783e37555515a63cc62e69 @potatogim potatogim committed with ShyamsundarR May 11, 2017
Showing with 1 addition and 1 deletion.
  1. +1 −1 rpc/rpc-transport/rdma/src/rdma.c
@@ -3253,7 +3253,7 @@ __gf_rdma_teardown (rpc_transport_t *this)
priv = this->private;
peer = &priv->peer;
- if (peer->cm_id->qp != NULL) {
+ if (peer->cm_id && peer->cm_id->qp != NULL) {
__gf_rdma_destroy_qp (this);
}

0 comments on commit ccfa067

Please sign in to comment.