aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/xprtrdma/frwr_ops.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sunrpc/xprtrdma/frwr_ops.c')
-rw-r--r--net/sunrpc/xprtrdma/frwr_ops.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/net/sunrpc/xprtrdma/frwr_ops.c b/net/sunrpc/xprtrdma/frwr_ops.c
index ea59c1b435ff..0a7b9df70133 100644
--- a/net/sunrpc/xprtrdma/frwr_ops.c
+++ b/net/sunrpc/xprtrdma/frwr_ops.c
@@ -178,6 +178,8 @@ frwr_op_map(struct rpcrdma_xprt *r_xprt, struct rpcrdma_mr_seg *seg,
178 int nsegs, bool writing) 178 int nsegs, bool writing)
179{ 179{
180 struct rpcrdma_ia *ia = &r_xprt->rx_ia; 180 struct rpcrdma_ia *ia = &r_xprt->rx_ia;
181 struct ib_device *device = ia->ri_id->device;
182 enum dma_data_direction direction = rpcrdma_data_dir(writing);
181 struct rpcrdma_mr_seg *seg1 = seg; 183 struct rpcrdma_mr_seg *seg1 = seg;
182 struct rpcrdma_mw *mw = seg1->rl_mw; 184 struct rpcrdma_mw *mw = seg1->rl_mw;
183 struct rpcrdma_frmr *frmr = &mw->r.frmr; 185 struct rpcrdma_frmr *frmr = &mw->r.frmr;
@@ -197,7 +199,7 @@ frwr_op_map(struct rpcrdma_xprt *r_xprt, struct rpcrdma_mr_seg *seg,
197 if (nsegs > ia->ri_max_frmr_depth) 199 if (nsegs > ia->ri_max_frmr_depth)
198 nsegs = ia->ri_max_frmr_depth; 200 nsegs = ia->ri_max_frmr_depth;
199 for (page_no = i = 0; i < nsegs;) { 201 for (page_no = i = 0; i < nsegs;) {
200 rpcrdma_map_one(ia, seg, writing); 202 rpcrdma_map_one(device, seg, direction);
201 pa = seg->mr_dma; 203 pa = seg->mr_dma;
202 for (seg_len = seg->mr_len; seg_len > 0; seg_len -= PAGE_SIZE) { 204 for (seg_len = seg->mr_len; seg_len > 0; seg_len -= PAGE_SIZE) {
203 frmr->fr_pgl->page_list[page_no++] = pa; 205 frmr->fr_pgl->page_list[page_no++] = pa;
@@ -247,7 +249,7 @@ out_senderr:
247 ib_update_fast_reg_key(mr, --key); 249 ib_update_fast_reg_key(mr, --key);
248 frmr->fr_state = FRMR_IS_INVALID; 250 frmr->fr_state = FRMR_IS_INVALID;
249 while (i--) 251 while (i--)
250 rpcrdma_unmap_one(ia, --seg); 252 rpcrdma_unmap_one(device, --seg);
251 return rc; 253 return rc;
252} 254}
253 255
@@ -261,6 +263,7 @@ frwr_op_unmap(struct rpcrdma_xprt *r_xprt, struct rpcrdma_mr_seg *seg)
261 struct rpcrdma_ia *ia = &r_xprt->rx_ia; 263 struct rpcrdma_ia *ia = &r_xprt->rx_ia;
262 struct ib_send_wr invalidate_wr, *bad_wr; 264 struct ib_send_wr invalidate_wr, *bad_wr;
263 int rc, nsegs = seg->mr_nsegs; 265 int rc, nsegs = seg->mr_nsegs;
266 struct ib_device *device;
264 267
265 seg1->rl_mw->r.frmr.fr_state = FRMR_IS_INVALID; 268 seg1->rl_mw->r.frmr.fr_state = FRMR_IS_INVALID;
266 269
@@ -271,8 +274,9 @@ frwr_op_unmap(struct rpcrdma_xprt *r_xprt, struct rpcrdma_mr_seg *seg)
271 DECR_CQCOUNT(&r_xprt->rx_ep); 274 DECR_CQCOUNT(&r_xprt->rx_ep);
272 275
273 read_lock(&ia->ri_qplock); 276 read_lock(&ia->ri_qplock);
277 device = ia->ri_id->device;
274 while (seg1->mr_nsegs--) 278 while (seg1->mr_nsegs--)
275 rpcrdma_unmap_one(ia, seg++); 279 rpcrdma_unmap_one(device, seg++);
276 rc = ib_post_send(ia->ri_id->qp, &invalidate_wr, &bad_wr); 280 rc = ib_post_send(ia->ri_id->qp, &invalidate_wr, &bad_wr);
277 read_unlock(&ia->ri_qplock); 281 read_unlock(&ia->ri_qplock);
278 if (rc) 282 if (rc)