diff options
| author | Tom Tucker <tom@opengridcomputing.com> | 2008-08-11 16:14:53 -0400 |
|---|---|---|
| committer | Tom Tucker <tom@opengridcomputing.com> | 2008-10-06 15:46:08 -0400 |
| commit | 04911b539c9817aa88a6da8f563e65e3e0bc974b (patch) | |
| tree | 9379440a4ca2a972d02d35feb3ac6ab0419e96c4 | |
| parent | afd566ea080572499cc01d42d2f578bf4b54f20f (diff) | |
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: Tom Tucker <tom@opengridcomputing.com>
| -rw-r--r-- | net/sunrpc/xprtrdma/svc_rdma_transport.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/net/sunrpc/xprtrdma/svc_rdma_transport.c b/net/sunrpc/xprtrdma/svc_rdma_transport.c index 98f945c5a007..c0cd334fe1c6 100644 --- a/net/sunrpc/xprtrdma/svc_rdma_transport.c +++ b/net/sunrpc/xprtrdma/svc_rdma_transport.c | |||
| @@ -1314,10 +1314,14 @@ void svc_rdma_send_error(struct svcxprt_rdma *xprt, struct rpcrdma_msg *rmsgp, | |||
| 1314 | length = svc_rdma_xdr_encode_error(xprt, rmsgp, err, va); | 1314 | length = svc_rdma_xdr_encode_error(xprt, rmsgp, err, va); |
| 1315 | 1315 | ||
| 1316 | /* Prepare SGE for local address */ | 1316 | /* Prepare SGE for local address */ |
| 1317 | atomic_inc(&xprt->sc_dma_used); | ||
| 1318 | sge.addr = ib_dma_map_page(xprt->sc_cm_id->device, | 1317 | sge.addr = ib_dma_map_page(xprt->sc_cm_id->device, |
| 1319 | p, 0, PAGE_SIZE, DMA_FROM_DEVICE); | 1318 | p, 0, PAGE_SIZE, DMA_FROM_DEVICE); |
| 1320 | sge.lkey = xprt->sc_phys_mr->lkey; | 1319 | if (ib_dma_mapping_error(xprt->sc_cm_id->device, sge.addr)) { |
| 1320 | put_page(p); | ||
| 1321 | return; | ||
| 1322 | } | ||
| 1323 | atomic_inc(&xprt->sc_dma_used); | ||
| 1324 | sge.lkey = xprt->sc_dma_lkey; | ||
| 1321 | sge.length = length; | 1325 | sge.length = length; |
| 1322 | 1326 | ||
| 1323 | ctxt = svc_rdma_get_context(xprt); | 1327 | ctxt = svc_rdma_get_context(xprt); |
| @@ -1338,6 +1342,9 @@ void svc_rdma_send_error(struct svcxprt_rdma *xprt, struct rpcrdma_msg *rmsgp, | |||
| 1338 | if (ret) { | 1342 | if (ret) { |
| 1339 | dprintk("svcrdma: Error %d posting send for protocol error\n", | 1343 | dprintk("svcrdma: Error %d posting send for protocol error\n", |
| 1340 | ret); | 1344 | ret); |
| 1345 | ib_dma_unmap_page(xprt->sc_cm_id->device, | ||
| 1346 | sge.addr, PAGE_SIZE, | ||
| 1347 | DMA_FROM_DEVICE); | ||
| 1341 | svc_rdma_put_context(ctxt, 1); | 1348 | svc_rdma_put_context(ctxt, 1); |
| 1342 | } | 1349 | } |
| 1343 | } | 1350 | } |
