ic->i_flowctl ? ", flow control" : "");
        }
 
+       atomic_set(&ic->i_cq_quiesce, 0);
+
        /* Init rings and fill recv. this needs to wait until protocol
         * negotiation is complete, since ring layout is different
         * from 3.1 to 4.1.
 
        rds_ib_stats_inc(s_ib_tasklet_call);
 
+       /* if cq has been already reaped, ignore incoming cq event */
+       if (atomic_read(&ic->i_cq_quiesce))
+               return;
+
        poll_scq(ic, ic->i_send_cq, ic->i_send_wc);
        ib_req_notify_cq(ic->i_send_cq, IB_CQ_NEXT_COMP);
        poll_scq(ic, ic->i_send_cq, ic->i_send_wc);
 
        rds_ib_stats_inc(s_ib_tasklet_call);
 
+       /* if cq has been already reaped, ignore incoming cq event */
+       if (atomic_read(&ic->i_cq_quiesce))
+               return;
+
        memset(&state, 0, sizeof(state));
        poll_rcq(ic, ic->i_recv_cq, ic->i_recv_wc, &state);
        ib_req_notify_cq(ic->i_recv_cq, IB_CQ_SOLICITED);
                tasklet_kill(&ic->i_send_tasklet);
                tasklet_kill(&ic->i_recv_tasklet);
 
+               atomic_set(&ic->i_cq_quiesce, 1);
+
                /* first destroy the ib state that generates callbacks */
                if (ic->i_cm_id->qp)
                        rdma_destroy_qp(ic->i_cm_id);