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

Commit 04911b53 authored by Tom Tucker's avatar Tom Tucker
Browse files

svcrdma: Update svc_rdma_send_error to use DMA LKEY



Update the svc_rdma_send_error code to use the DMA LKEY which is valid
regardless of the memory registration strategy in use.

Signed-off-by: default avatarTom Tucker <tom@opengridcomputing.com>
parent afd566ea
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -1314,10 +1314,14 @@ void svc_rdma_send_error(struct svcxprt_rdma *xprt, struct rpcrdma_msg *rmsgp,
	length = svc_rdma_xdr_encode_error(xprt, rmsgp, err, va);

	/* Prepare SGE for local address */
	atomic_inc(&xprt->sc_dma_used);
	sge.addr = ib_dma_map_page(xprt->sc_cm_id->device,
				   p, 0, PAGE_SIZE, DMA_FROM_DEVICE);
	sge.lkey = xprt->sc_phys_mr->lkey;
	if (ib_dma_mapping_error(xprt->sc_cm_id->device, sge.addr)) {
		put_page(p);
		return;
	}
	atomic_inc(&xprt->sc_dma_used);
	sge.lkey = xprt->sc_dma_lkey;
	sge.length = length;

	ctxt = svc_rdma_get_context(xprt);
@@ -1338,6 +1342,9 @@ void svc_rdma_send_error(struct svcxprt_rdma *xprt, struct rpcrdma_msg *rmsgp,
	if (ret) {
		dprintk("svcrdma: Error %d posting send for protocol error\n",
			ret);
		ib_dma_unmap_page(xprt->sc_cm_id->device,
				  sge.addr, PAGE_SIZE,
				  DMA_FROM_DEVICE);
		svc_rdma_put_context(ctxt, 1);
	}
}