/* Since an RQ completion handler is called on interrupt context, we need to defer the handling of the I/O to a tasklet  */
static void rq_comp_handler(struct ib_cq *cq, void *cq_context)
/* Since an RQ completion handler is called on interrupt context, we need to defer the handling of the I/O to a tasklet  */
static void rq_comp_handler(struct ib_cq *cq, void *cq_context)
{
	struct svcxprt_rdma *xprt = cq_context;
	unsigned long flags;
	if (atomic_read(&xprt->sc_xprt.xpt_ref.refcount)==0)
		return;
	set_bit(RDMAXPRT_RQ_PENDING, &xprt->sc_flags);
	spin_lock_irqsave(&dto_lock, flags);
	if (list_empty(&xprt->sc_dto_q)) {
		svc_xprt_get(&xprt->sc_xprt);
		list_add_tail(&xprt->sc_dto_q, &dto_xprt_q);
	}
	spin_unlock_irqrestore(&dto_lock, flags);
	tasklet_schedule(&dto_tasklet);
}