xprtrdma: Don't post a LOCAL_INV in rpcrdma_register_frmr_external()
authorChuck Lever <chuck.lever@oracle.com>
Tue, 29 Jul 2014 21:25:03 +0000 (17:25 -0400)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Thu, 31 Jul 2014 20:22:56 +0000 (16:22 -0400)
commit440ddad51b821a8ab9099addcc29d4d18d02f6ac
tree3207e01926ef3b29760222602cd38c0a463b047b
parentddb6bebcc64678fcf73eb9e21f80c6dacfa093a7
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>
net/sunrpc/xprtrdma/verbs.c