summaryrefslogtreecommitdiffstats
path: root/fs/btrfs
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2017-04-09 13:06:41 -0400
committerJ. Bruce Fields <bfields@redhat.com>2017-04-25 17:25:55 -0400
commit4757d90b15d851b9986bfca745eacc176359c13d (patch)
tree7413f7833d6a279a8845af48efda89925fc95451 /fs/btrfs
parent6b19cc5ca2f78ebc88f5d39ba6a94197bb392fcc (diff)
downloadop-kernel-dev-4757d90b15d851b9986bfca745eacc176359c13d.zip
op-kernel-dev-4757d90b15d851b9986bfca745eacc176359c13d.tar.gz
svcrdma: Report Write/Reply chunk overruns
Observed at Connectathon 2017. If a client has underestimated the size of a Write or Reply chunk, the Linux server writes as much payload data as it can, then it recognizes there was a problem and closes the connection without sending the transport header. This creates a couple of problems: <> The client never receives indication of the server-side failure, so it continues to retransmit the bad RPC. Forward progress on the transport is blocked. <> The reply payload pages are not moved out of the svc_rqst, thus they can be released by the RPC server before the RDMA Writes have completed. The new rdma_rw-ized helpers return a distinct error code when a Write/Reply chunk overrun occurs, so it's now easy for the caller (svc_rdma_sendto) to recognize this case. Instead of dropping the connection, post an RDMA_ERROR message. The client now sees an RDMA_ERROR and can properly terminate the RPC transaction. As part of the new logic, set up the same delayed release for these payload pages as would have occurred in the normal case. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/btrfs')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud