diff options
author | Daisuke Matsuda <matsuda-daisuke@fujitsu.com> | 2022-10-13 10:47:23 +0900 |
---|---|---|
committer | Leon Romanovsky <leon@kernel.org> | 2022-10-25 08:56:32 +0300 |
commit | 5ebc548f4f54fe971d741d80cd108f1a45c9e88d (patch) | |
tree | 2dd6bd8a32fe1dd049b858d3d669b29d5baa3172 /drivers/infiniband/sw/rxe/rxe_resp.c | |
parent | 71d236399160ad9beaae7267b93d2d487e8f19a0 (diff) | |
download | lwn-5ebc548f4f54fe971d741d80cd108f1a45c9e88d.tar.gz lwn-5ebc548f4f54fe971d741d80cd108f1a45c9e88d.zip |
RDMA/rxe: Make responder handle RDMA Read failures
Currently, responder can reply packets with invalid payloads if it fails
to copy messages to the packets. Add an error handling in read_reply() to
inform a requesting node of the failure.
Link: https://lore.kernel.org/r/20221013014724.3786212-1-matsuda-daisuke@fujitsu.com
Suggested-by: Li Zhijian <lizhijian@fujitsu.com>
Signed-off-by: Daisuke Matsuda <matsuda-daisuke@fujitsu.com>
Reviewed-by: Li Zhijian <lizhijian@fujitsu.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Diffstat (limited to 'drivers/infiniband/sw/rxe/rxe_resp.c')
-rw-r--r-- | drivers/infiniband/sw/rxe/rxe_resp.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c index ed5a09e86417..82b74e926e09 100644 --- a/drivers/infiniband/sw/rxe/rxe_resp.c +++ b/drivers/infiniband/sw/rxe/rxe_resp.c @@ -809,10 +809,14 @@ static enum resp_states read_reply(struct rxe_qp *qp, if (!skb) return RESPST_ERR_RNR; - rxe_mr_copy(mr, res->read.va, payload_addr(&ack_pkt), - payload, RXE_FROM_MR_OBJ); + err = rxe_mr_copy(mr, res->read.va, payload_addr(&ack_pkt), + payload, RXE_FROM_MR_OBJ); if (mr) rxe_put(mr); + if (err) { + kfree_skb(skb); + return RESPST_ERR_RKEY_VIOLATION; + } if (bth_pad(&ack_pkt)) { u8 *pad = payload_addr(&ack_pkt) + payload; |