linux_dsm_epyc7002/net/sunrpc/xprtrdma
Chuck Lever 62bdf94a20 xprtrdma: Fix DMAR failure in frwr_op_map() after reconnect
When a LOCALINV WR is flushed, the frmr is marked STALE, then
frwr_op_unmap_sync DMA-unmaps the frmr's SGL. These STALE frmrs
are then recovered when frwr_op_map hunts for an INVALID frmr to
use.

All other cases that need frmr recovery leave that SGL DMA-mapped.
The FRMR recovery path unconditionally DMA-unmaps the frmr's SGL.

To avoid DMA unmapping the SGL twice for flushed LOCAL_INV WRs,
alter the recovery logic (rather than the hot frwr_op_unmap_sync
path) to distinguish among these cases. This solution also takes
care of the case where multiple LOCAL_INV WRs are issued for the
same rpcrdma_req, some complete successfully, but some are flushed.

Reported-by: Vasco Steinmetz <linux@kyberraum.net>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Tested-by: Vasco Steinmetz <linux@kyberraum.net>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
2016-11-10 11:04:54 -05:00
..
backchannel.c xprtrdma: Use gathered Send for large inline messages 2016-09-19 13:08:38 -04:00
fmr_ops.c xprtrdma: Basic support for Remote Invalidation 2016-09-19 13:08:38 -04:00
frwr_ops.c xprtrdma: Fix DMAR failure in frwr_op_map() after reconnect 2016-11-10 11:04:54 -05:00
Makefile xprtrdma: Remove ALLPHYSICAL memory registration mode 2016-07-11 15:50:43 -04:00
module.c rpcrdma: Merge svcrdma and xprtrdma modules into one 2015-06-04 16:56:02 -04:00
rpc_rdma.c xprtrdma: Eliminate rpcrdma_receive_worker() 2016-09-19 13:08:38 -04:00
svc_rdma_backchannel.c SUNRPC: Generalize the RPC buffer release API 2016-09-19 13:08:37 -04:00
svc_rdma_marshal.c svcrdma: Generalize svc_rdma_xdr_decode_req() 2016-05-13 15:53:06 -04:00
svc_rdma_recvfrom.c A very quiet cycle for nfsd, mainly just an RDMA update from Chuck Lever. 2016-05-24 14:39:20 -07:00
svc_rdma_sendto.c svcrdma: svc_rdma_put_context() is invoked twice in Send error path 2016-05-13 15:53:05 -04:00
svc_rdma_transport.c svcrdma: Drain QP before freeing svcrdma_xprt 2016-05-13 15:53:06 -04:00
svc_rdma.c svcrdma: Define maximum number of backchannel requests 2016-01-19 15:30:48 -05:00
transport.c xprtrdma: Support larger inline thresholds 2016-09-19 13:08:38 -04:00
verbs.c xprtrdma: Eliminate rpcrdma_receive_worker() 2016-09-19 13:08:38 -04:00
xprt_rdma.h xprtrdma: Fix DMAR failure in frwr_op_map() after reconnect 2016-11-10 11:04:54 -05:00