diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2015-12-16 17:23:03 -0500 |
---|---|---|
committer | Anna Schumaker <Anna.Schumaker@Netapp.com> | 2015-12-18 15:34:33 -0500 |
commit | 73eee9b2de1fa08f2a82bb32ac4ec5e605716a91 (patch) | |
tree | 663803384a95f717607a6945f7c018343367f1f2 /net | |
parent | 7c7a5390dc6c8d89fc368424b69a4eef8e43f411 (diff) |
xprtrdma: Add ro_unmap_sync method for all-physical registration
physical's ro_unmap is synchronous already. The new ro_unmap_sync
method just has to DMA unmap all MRs associated with the RPC
request.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Tested-by: Devesh Sharma <devesh.sharma@avagotech.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/sunrpc/xprtrdma/physical_ops.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/net/sunrpc/xprtrdma/physical_ops.c b/net/sunrpc/xprtrdma/physical_ops.c index 617b76f22154..dbb302ecf590 100644 --- a/net/sunrpc/xprtrdma/physical_ops.c +++ b/net/sunrpc/xprtrdma/physical_ops.c | |||
@@ -83,6 +83,18 @@ physical_op_unmap(struct rpcrdma_xprt *r_xprt, struct rpcrdma_mr_seg *seg) | |||
83 | return 1; | 83 | return 1; |
84 | } | 84 | } |
85 | 85 | ||
86 | /* DMA unmap all memory regions that were mapped for "req". | ||
87 | */ | ||
88 | static void | ||
89 | physical_op_unmap_sync(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req) | ||
90 | { | ||
91 | struct ib_device *device = r_xprt->rx_ia.ri_device; | ||
92 | unsigned int i; | ||
93 | |||
94 | for (i = 0; req->rl_nchunks; --req->rl_nchunks) | ||
95 | rpcrdma_unmap_one(device, &req->rl_segments[i++]); | ||
96 | } | ||
97 | |||
86 | static void | 98 | static void |
87 | physical_op_destroy(struct rpcrdma_buffer *buf) | 99 | physical_op_destroy(struct rpcrdma_buffer *buf) |
88 | { | 100 | { |
@@ -90,6 +102,7 @@ physical_op_destroy(struct rpcrdma_buffer *buf) | |||
90 | 102 | ||
91 | const struct rpcrdma_memreg_ops rpcrdma_physical_memreg_ops = { | 103 | const struct rpcrdma_memreg_ops rpcrdma_physical_memreg_ops = { |
92 | .ro_map = physical_op_map, | 104 | .ro_map = physical_op_map, |
105 | .ro_unmap_sync = physical_op_unmap_sync, | ||
93 | .ro_unmap = physical_op_unmap, | 106 | .ro_unmap = physical_op_unmap, |
94 | .ro_open = physical_op_open, | 107 | .ro_open = physical_op_open, |
95 | .ro_maxpages = physical_op_maxpages, | 108 | .ro_maxpages = physical_op_maxpages, |