Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Vijay Immanuel and committed by
Doug Ledford
12171971 c75d3ec8

+6
+3
drivers/infiniband/sw/rxe/rxe_resp.c
··· 1219 1219 kfree_skb(skb); 1220 1220 } 1221 1221 1222 + if (notify) 1223 + return; 1224 + 1222 1225 while (!qp->srq && qp->rq.queue && queue_head(qp->rq.queue)) 1223 1226 advance_consumer(qp->rq.queue); 1224 1227 }
+3
drivers/infiniband/sw/rxe/rxe_verbs.c
··· 914 914 915 915 spin_unlock_irqrestore(&rq->producer_lock, flags); 916 916 917 + if (qp->resp.state == QP_STATE_ERROR) 918 + rxe_run_task(&qp->resp.task, 1); 919 + 917 920 err1: 918 921 return err; 919 922 }