linux/net/sunrpc/xprtrdma
Chuck Lever 440ddad51b xprtrdma: Don't post a LOCAL_INV in rpcrdma_register_frmr_external()
Any FRMR arriving in rpcrdma_register_frmr_external() is now
guaranteed to be either invalid, or to be targeted by a queued
LOCAL_INV that will invalidate it before the adapter processes
the FAST_REG_MR being built here.

The problem with current arrangement of chaining a LOCAL_INV to the
FAST_REG_MR is that if the transport is not connected, the LOCAL_INV
is flushed and the FAST_REG_MR is flushed. This leaves the FRMR
valid with the old rkey. But rpcrdma_register_frmr_external() has
already bumped the in-memory rkey.

Next time through rpcrdma_register_frmr_external(), a LOCAL_INV and
FAST_REG_MR is attempted again because the FRMR is still valid. But
the rkey no longer matches the hardware's rkey, and a memory
management operation error occurs.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Tested-by: Steve Wise <swise@opengridcomputing.com>
Tested-by: Shirley Ma <shirley.ma@oracle.com>
Tested-by: Devesh Sharma <devesh.sharma@emulex.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
2014-07-31 16:22:56 -04:00
..
Makefile xprtrdma: add separate Kconfig options for NFSoRDMA client and server support 2014-03-28 18:02:12 -04:00
rpc_rdma.c xprtrdma: Don't invalidate FRMRs if registration fails 2014-07-31 16:22:53 -04:00
svc_rdma_marshal.c svcrdma: underflow issue in decode_write_list() 2013-07-15 11:46:23 -04:00
svc_rdma_recvfrom.c svcrdma: Fence LOCAL_INV work requests 2014-06-06 19:22:51 -04:00
svc_rdma_sendto.c svcrdma: refactor marshalling logic 2014-06-06 19:22:50 -04:00
svc_rdma_transport.c svcrdma: refactor marshalling logic 2014-06-06 19:22:50 -04: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: Update rkeys after transport reconnect 2014-07-31 16:22:53 -04:00
verbs.c xprtrdma: Don't post a LOCAL_INV in rpcrdma_register_frmr_external() 2014-07-31 16:22:56 -04:00
xprt_rdma.h xprtrdma: Reset FRMRs when FAST_REG_MR is flushed by a disconnect 2014-07-31 16:22:55 -04:00