Ver Fonte

SVCRDMA: Add check for XPT_CLOSE in svc_rdma_send

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>
Tom Tucker há 17 anos atrás
pai
commit
830bb59b6e
1 ficheiros alterados com 2 adições e 0 exclusões
  1. 2 0
      net/sunrpc/xprtrdma/svc_rdma_transport.c

+ 2 - 0
net/sunrpc/xprtrdma/svc_rdma_transport.c

@@ -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 */