diff options
Diffstat (limited to 'net/sunrpc/xprtrdma/frwr_ops.c')
-rw-r--r-- | net/sunrpc/xprtrdma/frwr_ops.c | 10 |
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) |