linux/net/sunrpc/xprtrdma
Chuck Lever 951e721ca0 xprtrdma: Introduce an FRMR recovery workqueue
After a transport disconnect, FRMRs can be left in an undetermined
state. In particular, the MR's rkey is no good.

Currently, FRMRs are fixed up by the transport connect worker, but
that can race with ->ro_unmap if an RPC happens to exit while the
transport connect worker is running.

A better way of dealing with broken FRMRs is to detect them before
they are re-used by ->ro_map. Such FRMRs are either already invalid
or are owned by the sending RPC, and thus no race with ->ro_unmap
is possible.

Introduce a mechanism for handing broken FRMRs to a workqueue to be
reset in a context that is appropriate for allocating resources
(ie. an ib_alloc_fast_reg_mr() API call).

This mechanism is not yet used, but will be in subsequent patches.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Reviewed-by: Steve Wise <swise@opengridcomputing.com>
Reviewed-By: Devesh Sharma <devesh.sharma@avagotech.com>
Tested-By: Devesh Sharma <devesh.sharma@avagotech.com>
Reviewed-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
2015-06-12 13:10:36 -04:00
..
fmr_ops.c xprtrdma: Acquire FMRs in rpcrdma_fmr_register_external() 2015-06-12 13:10:36 -04:00
frwr_ops.c xprtrdma: Introduce an FRMR recovery workqueue 2015-06-12 13:10:36 -04:00
Makefile xprtrdma: Add vector of ops for each memory registration strategy 2015-03-31 09:52:52 -04:00
physical_ops.c xprtrdma: Use ib_device pointer safely 2015-06-12 13:10:36 -04:00
rpc_rdma.c xprtrdma: Remove rr_func 2015-06-12 13:10:36 -04:00
svc_rdma_marshal.c svcrdma: Clean up read chunk counting 2015-01-15 15:01:44 -05:00
svc_rdma_recvfrom.c svcrdma: Handle additional inline content 2015-01-15 15:01:49 -05:00
svc_rdma_sendto.c svcrdma: Find rmsgp more reliably 2015-01-15 15:01:45 -05:00
svc_rdma_transport.c svcrdma: Plant reader function in struct svcxprt_rdma 2015-01-15 15:01:46 -05:00
svc_rdma.c net: Convert uses of typedef ctl_table to struct ctl_table 2013-06-13 02:36:09 -07:00
transport.c xprtrdma: Introduce an FRMR recovery workqueue 2015-06-12 13:10:36 -04:00
verbs.c xprtrdma: Acquire FMRs in rpcrdma_fmr_register_external() 2015-06-12 13:10:36 -04:00
xprt_rdma.h xprtrdma: Introduce an FRMR recovery workqueue 2015-06-12 13:10:36 -04:00