Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ced4ac0c authored by Chuck Lever's avatar Chuck Lever Committed by Doug Ledford
Browse files

svcrdma: Clean up process_context()



Be sure the completed ctxt is put in every path.

The xprt enqueue can take a while, so put the completed ctxt back
in circulation _before_ enqueuing the xprt.

Remove/disable debugging.

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
Acked-by: default avatarBruce Fields <bfields@fieldses.org>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 3d61677c
Loading
Loading
Loading
Loading
+21 −23
Original line number Diff line number Diff line
@@ -386,46 +386,44 @@ static void rq_cq_reap(struct svcxprt_rdma *xprt)
static void process_context(struct svcxprt_rdma *xprt,
			    struct svc_rdma_op_ctxt *ctxt)
{
	struct svc_rdma_op_ctxt *read_hdr;
	int free_pages = 0;

	svc_rdma_unmap_dma(ctxt);

	switch (ctxt->wr_op) {
	case IB_WR_SEND:
		if (ctxt->frmr)
			pr_err("svcrdma: SEND: ctxt->frmr != NULL\n");
		svc_rdma_put_context(ctxt, 1);
		free_pages = 1;
		break;

	case IB_WR_RDMA_WRITE:
		if (ctxt->frmr)
			pr_err("svcrdma: WRITE: ctxt->frmr != NULL\n");
		svc_rdma_put_context(ctxt, 0);
		break;

	case IB_WR_RDMA_READ:
	case IB_WR_RDMA_READ_WITH_INV:
		svc_rdma_put_frmr(xprt, ctxt->frmr);
		if (test_bit(RDMACTXT_F_LAST_CTXT, &ctxt->flags)) {
			struct svc_rdma_op_ctxt *read_hdr = ctxt->read_hdr;
			if (read_hdr) {

		if (!test_bit(RDMACTXT_F_LAST_CTXT, &ctxt->flags))
			break;

		read_hdr = ctxt->read_hdr;
		svc_rdma_put_context(ctxt, 0);

		spin_lock_bh(&xprt->sc_rq_dto_lock);
		set_bit(XPT_DATA, &xprt->sc_xprt.xpt_flags);
		list_add_tail(&read_hdr->dto_q,
			      &xprt->sc_read_complete_q);
		spin_unlock_bh(&xprt->sc_rq_dto_lock);
			} else {
				pr_err("svcrdma: ctxt->read_hdr == NULL\n");
			}
		svc_xprt_enqueue(&xprt->sc_xprt);
		}
		svc_rdma_put_context(ctxt, 0);
		break;
		return;

	default:
		printk(KERN_ERR "svcrdma: unexpected completion type, "
		       "opcode=%d\n",
		dprintk("svcrdma: unexpected completion opcode=%d\n",
			ctxt->wr_op);
		break;
	}

	svc_rdma_put_context(ctxt, free_pages);
}

/*