rxe: fix broken receive queue draining
If we modified the qp to ERROR state, and drained the recieve queue, post_recv must trigger the responder task to complete the drain work request. Cc: Bart Van Assche <bart.vanassche@sandisk.com> Signed-off-by: Vijay Immanuel <vijayi@attalasystems.com> Signed-off-by: Sagi Grimberg <sagi@grimberg.me> Reviewed-by: Bart Van Assche <bart.vanassche@wdc.com>-- Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
Родитель
c75d3ec8c0
Коммит
1217197142
|
@ -1219,6 +1219,9 @@ void rxe_drain_req_pkts(struct rxe_qp *qp, bool notify)
|
|||
kfree_skb(skb);
|
||||
}
|
||||
|
||||
if (notify)
|
||||
return;
|
||||
|
||||
while (!qp->srq && qp->rq.queue && queue_head(qp->rq.queue))
|
||||
advance_consumer(qp->rq.queue);
|
||||
}
|
||||
|
|
|
@ -914,6 +914,9 @@ static int rxe_post_recv(struct ib_qp *ibqp, struct ib_recv_wr *wr,
|
|||
|
||||
spin_unlock_irqrestore(&rq->producer_lock, flags);
|
||||
|
||||
if (qp->resp.state == QP_STATE_ERROR)
|
||||
rxe_run_task(&qp->resp.task, 1);
|
||||
|
||||
err1:
|
||||
return err;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче