SVCRDMA: Add check for XPT_CLOSE in svc_rdma_send
authorTom Tucker <tom@opengridcomputing.com>
Tue, 11 Mar 2008 17:44:27 +0000 (12:44 -0500)
committerJ. Bruce Fields <bfields@citi.umich.edu>
Wed, 23 Apr 2008 20:13:40 +0000 (16:13 -0400)
SVCRDMA: Add check for XPT_CLOSE in svc_rdma_send

The svcrdma transport can crash if a send is waiting for an
empty SQ slot and the connection is closed due to an asynchronous error.
The crash is caused when svc_rdma_send attempts to send on a deleted
QP.

Signed-off-by: Tom Tucker <tom@opengridcomputing.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
net/sunrpc/xprtrdma/svc_rdma_transport.c

index 16fd3f6..af408fc 100644 (file)
@@ -1036,6 +1036,8 @@ int svc_rdma_send(struct svcxprt_rdma *xprt, struct ib_send_wr *wr)
                        wait_event(xprt->sc_send_wait,
                                   atomic_read(&xprt->sc_sq_count) <
                                   xprt->sc_sq_depth);
+                       if (test_bit(XPT_CLOSE, &xprt->sc_xprt.xpt_flags))
+                               return 0;
                        continue;
                }
                /* Bumped used SQ WR count and post */