xprtrdma: Disconnect on registration failure
authorChuck Lever <chuck.lever@oracle.com>
Wed, 28 May 2014 14:35:14 +0000 (10:35 -0400)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Wed, 4 Jun 2014 12:56:53 +0000 (08:56 -0400)
commitc93c62231cf55df4a26bd08937efeea97e6fc5e8
treefa9b5c277f6fad09e1157cba579816c760c985ae
parentc977dea22708688eae31774f70126c97aa4dfe83
xprtrdma: Disconnect on registration failure

If rpcrdma_register_external() fails during request marshaling, the
current RPC request is killed. Instead, this RPC should be retried
after reconnecting the transport instance.

The most likely reason for registration failure with FRMR is a
failed post_send, which would be due to a remote transport
disconnect or memory exhaustion. These issues can be recovered
by a retry.

Problems encountered in the marshaling logic itself will not be
corrected by trying again, so these should still kill a request.

Now that we've added a clean exit for marshaling errors, take the
opportunity to defang some BUG_ON's.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
net/sunrpc/xprtrdma/rpc_rdma.c
net/sunrpc/xprtrdma/transport.c