Commit 1a954051 authored by Tom Talpey's avatar Tom Talpey Committed by Trond Myklebust

RPC/RDMA: fix connect/reconnect resource leak.

The RPC/RDMA code can leak RDMA connection manager endpoints in
certain error cases on connect. Don't signal unwanted events,
and be certain to destroy any allocated qp.
Signed-off-by: default avatarTom Talpey <talpey@netapp.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 926449ba
...@@ -338,10 +338,8 @@ connected: ...@@ -338,10 +338,8 @@ connected:
wake_up_all(&ep->rep_connect_wait); wake_up_all(&ep->rep_connect_wait);
break; break;
default: default:
ia->ri_async_rc = -EINVAL; dprintk("RPC: %s: unexpected CM event %d\n",
dprintk("RPC: %s: unexpected CM event %X\n",
__func__, event->event); __func__, event->event);
complete(&ia->ri_done);
break; break;
} }
...@@ -355,6 +353,8 @@ rpcrdma_create_id(struct rpcrdma_xprt *xprt, ...@@ -355,6 +353,8 @@ rpcrdma_create_id(struct rpcrdma_xprt *xprt,
struct rdma_cm_id *id; struct rdma_cm_id *id;
int rc; int rc;
init_completion(&ia->ri_done);
id = rdma_create_id(rpcrdma_conn_upcall, xprt, RDMA_PS_TCP); id = rdma_create_id(rpcrdma_conn_upcall, xprt, RDMA_PS_TCP);
if (IS_ERR(id)) { if (IS_ERR(id)) {
rc = PTR_ERR(id); rc = PTR_ERR(id);
...@@ -427,8 +427,6 @@ rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr, int memreg) ...@@ -427,8 +427,6 @@ rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr, int memreg)
struct ib_device_attr devattr; struct ib_device_attr devattr;
struct rpcrdma_ia *ia = &xprt->rx_ia; struct rpcrdma_ia *ia = &xprt->rx_ia;
init_completion(&ia->ri_done);
ia->ri_id = rpcrdma_create_id(xprt, ia, addr); ia->ri_id = rpcrdma_create_id(xprt, ia, addr);
if (IS_ERR(ia->ri_id)) { if (IS_ERR(ia->ri_id)) {
rc = PTR_ERR(ia->ri_id); rc = PTR_ERR(ia->ri_id);
...@@ -815,6 +813,7 @@ retry: ...@@ -815,6 +813,7 @@ retry:
goto out; goto out;
} }
/* END TEMP */ /* END TEMP */
rdma_destroy_qp(ia->ri_id);
rdma_destroy_id(ia->ri_id); rdma_destroy_id(ia->ri_id);
ia->ri_id = id; ia->ri_id = id;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment