linux/net/sunrpc/xprtrdma
Chuck Lever 5fac1c6ccc xprtrdma: Reset credit grant properly after a disconnect
[ Upstream commit ef739b2175 ]

On a fresh connection, an RPC/RDMA client is supposed to send only
one RPC Call until it gets a credit grant in the first RPC Reply
from the server [RFC 8166, Section 3.3.3].

There is a bug in the Linux client's credit accounting mechanism
introduced by commit e7ce710a88 ("xprtrdma: Avoid deadlock when
credit window is reset"). On connect, it simply dumps all pending
RPC Calls onto the new connection.

Servers have been tolerant of this bad behavior. Currently no server
implementation ever changes its credit grant over reconnects, and
servers always repost enough Receives before connections are fully
established.

To correct this issue, ensure that the client resets both the credit
grant _and_ the congestion window when handling a reconnect.

Fixes: e7ce710a88 ("xprtrdma: Avoid deadlock when credit ... ")
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Cc: stable@kernel.org
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2018-11-13 11:08:34 -08:00
..
backchannel.c NFS client updates for Linux 4.18 2018-06-12 10:09:03 -07:00
fmr_ops.c net/xprtrdma: Simplify ib_post_(send|recv|srq_recv)() calls 2018-07-24 16:06:37 -06:00
frwr_ops.c RDMA, core and ULPs: Declare ib_post_send() and ib_post_recv() arguments const 2018-07-30 20:09:34 -06:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
module.c NFS client updates for Linux 4.18 2018-06-12 10:09:03 -07:00
rpc_rdma.c NFS client updates for Linux 4.18 2018-06-12 10:09:03 -07:00
svc_rdma.c sunrpc: remove redundant variables 'checksumlen','blocksize' and 'data' 2018-08-09 16:11:21 -04:00
svc_rdma_backchannel.c xprtrdma: Reset credit grant properly after a disconnect 2018-11-13 11:08:34 -08:00
svc_rdma_recvfrom.c A mistake on my part caused me to tag my branch 6 commits too early, 2018-08-23 16:00:10 -07:00
svc_rdma_rw.c A mistake on my part caused me to tag my branch 6 commits too early, 2018-08-23 16:00:10 -07:00
svc_rdma_sendto.c A mistake on my part caused me to tag my branch 6 commits too early, 2018-08-23 16:00:10 -07:00
svc_rdma_transport.c A mistake on my part caused me to tag my branch 6 commits too early, 2018-08-23 16:00:10 -07:00
transport.c xprtrdma: Reset credit grant properly after a disconnect 2018-11-13 11:08:34 -08:00
verbs.c NFS client updates for Linux 4.19 2018-08-23 16:03:58 -07:00
xprt_rdma.h NFS client updates for Linux 4.18 2018-06-12 10:09:03 -07:00