xprtrdma: Send Queue size grows after a reconnect
authorChuck Lever <chuck.lever@oracle.com>
Mon, 26 Aug 2019 17:12:57 +0000 (13:12 -0400)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Mon, 26 Aug 2019 19:45:38 +0000 (15:45 -0400)
commit98ef77d1aaa7a2f4e1b2a721faa084222021fda7
tree76d4f0ed1bd0524c5253d3c28072c766f1e47974
parentf9e1afe0fa729337309fa44921da998d2e6e6198
xprtrdma: Send Queue size grows after a reconnect

Eli Dorfman reports that after a series of idle disconnects, an
RPC/RDMA transport becomes unusable (rdma_create_qp returns
-ENOMEM). Problem was tracked down to increasing Send Queue size
after each reconnect.

The rdma_create_qp() API does not promise to leave its @qp_init_attr
parameter unaltered. In fact, some drivers do modify one or more of
its fields. Thus our calls to rdma_create_qp must use a fresh copy
of ib_qp_init_attr each time.

This fix is appropriate for kernels dating back to late 2007, though
it will have to be adapted, as the connect code has changed over the
years.

Reported-by: Eli Dorfman <eli@vastdata.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
net/sunrpc/xprtrdma/verbs.c