@@ -921,8 +921,9 @@ static void srp_recv_completion(struct ib_cq *cq, void *target_ptr)
{
struct srp_target_port *target = target_ptr;
struct ib_wc wc;
+ int ret;
- ib_req_notify_cq(cq, IB_CQ_NEXT_COMP);
+again:
while (ib_poll_cq(cq, 1, &wc) > 0) {
if (wc.status) {
shost_printk(KERN_ERR, target->scsi_host,
@@ -934,6 +935,10 @@ static void srp_recv_completion(struct ib_cq *cq, void *target_ptr)
srp_handle_recv(target, &wc);
}
+ ret = ib_req_notify_cq(cq, IB_CQ_NEXT_COMP |
+ IB_CQ_REPORT_MISSED_EVENTS);
+ if (ret > 0)
+ goto again;
}
static void srp_send_completion(struct ib_cq *cq, void *target_ptr)