4.20-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Sagi Grimberg <[email protected]>

commit e48d8ed9c6193502d849b35767fd18e20bbd7ba2 upstream.

Error completions must still contain a valid wr_id and
qp_num such that the consumer can rely on. Correctly
fill these fields in receive error completions.

Reported-by: Walker Benjamin <[email protected]>
Cc: [email protected]
Signed-off-by: Sagi Grimberg <[email protected]>
Reviewed-by: Zhu Yanjun <[email protected]>
Tested-by: Zhu Yanjun <[email protected]>
Signed-off-by: Doug Ledford <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

---
 drivers/infiniband/sw/rxe/rxe_resp.c |   13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

--- a/drivers/infiniband/sw/rxe/rxe_resp.c
+++ b/drivers/infiniband/sw/rxe/rxe_resp.c
@@ -844,11 +844,16 @@ static enum resp_states do_complete(stru
 
        memset(&cqe, 0, sizeof(cqe));
 
-       wc->wr_id               = wqe->wr_id;
-       wc->status              = qp->resp.status;
-       wc->qp                  = &qp->ibqp;
+       if (qp->rcq->is_user) {
+               uwc->status             = qp->resp.status;
+               uwc->qp_num             = qp->ibqp.qp_num;
+               uwc->wr_id              = wqe->wr_id;
+       } else {
+               wc->status              = qp->resp.status;
+               wc->qp                  = &qp->ibqp;
+               wc->wr_id               = wqe->wr_id;
+       }
 
-       /* fields after status are not required for errors */
        if (wc->status == IB_WC_SUCCESS) {
                wc->opcode = (pkt->mask & RXE_IMMDT_MASK &&
                                pkt->mask & RXE_WRITE_MASK) ?


Reply via email to