path: root/rpc/rpc-transport/rdma/src/rdma.c
diff options
authorJi-Hyeon Gim <>2017-05-11 18:05:21 +0900
committerShyamsundar Ranganathan <>2017-05-12 03:09:09 +0000
commitccfa06767f1282d9a3783e37555515a63cc62e69 (patch)
tree3f984b37965df760f17b1621c2954006f27283d9 /rpc/rpc-transport/rdma/src/rdma.c
parent1a8fa910ccba7aa941f673302c1ddbd7bd818e39 (diff)
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 <> Reviewed-on: Reviewed-by: Amar Tumballi <> Reviewed-by: Prashanth Pai <> NetBSD-regression: NetBSD Build System <> Tested-by: Ji-Hyeon Gim CentOS-regression: Gluster Build System <> Smoke: Gluster Build System <> Reviewed-by: Jeff Darcy <>
Diffstat (limited to 'rpc/rpc-transport/rdma/src/rdma.c')
1 files changed, 1 insertions, 1 deletions
diff --git a/rpc/rpc-transport/rdma/src/rdma.c b/rpc/rpc-transport/rdma/src/rdma.c
index 14b068c..8d9e647 100644
--- a/rpc/rpc-transport/rdma/src/rdma.c
+++ b/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);