linux/net/sunrpc/xprtrdma
Tom Tucker 5c635e09ce RPCRDMA: Fix FRMR registration/invalidate handling.
When the rpc_memreg_strategy is 5, FRMR are used to map RPC data.
This mode uses an FRMR to map the RPC data, then invalidates
(i.e. unregisers) the data in xprt_rdma_free. These FRMR are used
across connections on the same mount, i.e. if the connection goes
away on an idle timeout and reconnects later, the FRMR are not
destroyed and recreated.

This creates a problem for transport errors because the WR that
invalidate an FRMR may be flushed (i.e. fail) leaving the
FRMR valid. When the FRMR is later used to map an RPC it will fail,
tearing down the transport and starting over. Over time, more and
more of the FRMR pool end up in the wrong state resulting in
seemingly random disconnects.

This fix keeps track of the FRMR state explicitly by setting it's
state based on the successful completion of a reg/inv WR. If the FRMR
is ever used and found to be in the wrong state, an invalidate WR
is prepended, re-syncing the FRMR state and avoiding the connection loss.

Signed-off-by: Tom Tucker <tom@ogc.us>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2011-03-11 15:39:27 -05:00
..
Makefile
rpc_rdma.c RPCRDMA: Fix to XDR page base interpretation in marshalling logic. 2011-03-11 15:39:27 -05:00
svc_rdma.c sunrpc/xprtrdma: clean up workqueue usage 2010-10-21 10:11:45 -04:00
svc_rdma_marshal.c
svc_rdma_recvfrom.c svcrdma: Cleanup DMA unmapping in error paths. 2010-10-18 19:51:32 -04:00
svc_rdma_sendto.c svcrdma: Cleanup DMA unmapping in error paths. 2010-10-18 19:51:32 -04:00
svc_rdma_transport.c SUNRPC: Remove resource leak in svc_rdma_send_error() 2011-03-10 15:04:54 -05:00
transport.c sunrpc/xprtrdma: clean up workqueue usage 2010-10-21 10:11:45 -04:00
verbs.c RPCRDMA: Fix FRMR registration/invalidate handling. 2011-03-11 15:39:27 -05:00
xprt_rdma.h RPCRDMA: Fix FRMR registration/invalidate handling. 2011-03-11 15:39:27 -05:00