/* Walks a list of transports with I/O pending, removing entries as they are added to the server's I/O pending list. Two bits indicate if SQ, RQ, or both have I/O pending. The dto_lock is an irqsave spinlock that serializes access to the transport list with the RQ and SQ interrupt handlers.  */
static void dto_tasklet_func(unsigned long data)
/* Walks a list of transports with I/O pending, removing entries as they are added to the server's I/O pending list. Two bits indicate if SQ, RQ, or both have I/O pending. The dto_lock is an irqsave spinlock that serializes access to the transport list with the RQ and SQ interrupt handlers.  */
static void dto_tasklet_func(unsigned long data)
{
	struct svcxprt_rdma *xprt;
	unsigned long flags;
	spin_lock_irqsave(&dto_lock, flags);
	while (!list_empty(&dto_xprt_q)) {
		xprt = list_entry(dto_xprt_q.next,
				  struct svcxprt_rdma, sc_dto_q);
		list_del_init(&xprt->sc_dto_q);
		spin_unlock_irqrestore(&dto_lock, flags);
		rq_cq_reap(xprt);
		sq_cq_reap(xprt);
		svc_xprt_put(&xprt->sc_xprt);
		spin_lock_irqsave(&dto_lock, flags);
	}
	spin_unlock_irqrestore(&dto_lock, flags);
}