diff options
author | Chuck Lever | 2014-05-28 16:32:17 +0200 |
---|---|---|
committer | Anna Schumaker | 2014-06-04 14:56:36 +0200 |
commit | 254f91e2fa1f4cc18fd2eb9d5481888ffe126d5b (patch) | |
tree | 59ee9a80d0ab6a7875cf9b9e47337b36e2744d92 /net/sunrpc/xprtrdma/verbs.c | |
parent | nfs-rdma: Fix for FMR leaks (diff) | |
download | kernel-qcow2-linux-254f91e2fa1f4cc18fd2eb9d5481888ffe126d5b.tar.gz kernel-qcow2-linux-254f91e2fa1f4cc18fd2eb9d5481888ffe126d5b.tar.xz kernel-qcow2-linux-254f91e2fa1f4cc18fd2eb9d5481888ffe126d5b.zip |
xprtrdma: RPC/RDMA must invoke xprt_wake_pending_tasks() in process context
An IB provider can invoke rpcrdma_conn_func() in an IRQ context,
thus rpcrdma_conn_func() cannot be allowed to directly invoke
generic RPC functions like xprt_wake_pending_tasks().
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Tested-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Diffstat (limited to 'net/sunrpc/xprtrdma/verbs.c')
-rw-r--r-- | net/sunrpc/xprtrdma/verbs.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c index 8f9704e0f03d..9cb88f373c7a 100644 --- a/net/sunrpc/xprtrdma/verbs.c +++ b/net/sunrpc/xprtrdma/verbs.c @@ -742,6 +742,7 @@ rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia, INIT_CQCOUNT(ep); ep->rep_ia = ia; init_waitqueue_head(&ep->rep_connect_wait); + INIT_DELAYED_WORK(&ep->rep_connect_worker, rpcrdma_connect_worker); /* * Create a single cq for receive dto and mw_bind (only ever @@ -817,6 +818,8 @@ rpcrdma_ep_destroy(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia) dprintk("RPC: %s: entering, connected is %d\n", __func__, ep->rep_connected); + cancel_delayed_work_sync(&ep->rep_connect_worker); + if (ia->ri_id->qp) { rc = rpcrdma_ep_disconnect(ep, ia); if (rc) |