aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/sunrpc/xprtrdma/fmr_ops.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/net/sunrpc/xprtrdma/fmr_ops.c b/net/sunrpc/xprtrdma/fmr_ops.c
index 009694b0c56e..9d50f3a5732a 100644
--- a/net/sunrpc/xprtrdma/fmr_ops.c
+++ b/net/sunrpc/xprtrdma/fmr_ops.c
@@ -186,15 +186,10 @@ static void
186__fmr_dma_unmap(struct rpcrdma_xprt *r_xprt, struct rpcrdma_mr_seg *seg) 186__fmr_dma_unmap(struct rpcrdma_xprt *r_xprt, struct rpcrdma_mr_seg *seg)
187{ 187{
188 struct ib_device *device = r_xprt->rx_ia.ri_device; 188 struct ib_device *device = r_xprt->rx_ia.ri_device;
189 struct rpcrdma_mw *mw = seg->rl_mw;
190 int nsegs = seg->mr_nsegs; 189 int nsegs = seg->mr_nsegs;
191 190
192 seg->rl_mw = NULL;
193
194 while (nsegs--) 191 while (nsegs--)
195 rpcrdma_unmap_one(device, seg++); 192 rpcrdma_unmap_one(device, seg++);
196
197 rpcrdma_put_mw(r_xprt, mw);
198} 193}
199 194
200/* Invalidate all memory regions that were registered for "req". 195/* Invalidate all memory regions that were registered for "req".
@@ -237,9 +232,11 @@ fmr_op_unmap_sync(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req)
237 seg = &req->rl_segments[i]; 232 seg = &req->rl_segments[i];
238 233
239 __fmr_dma_unmap(r_xprt, seg); 234 __fmr_dma_unmap(r_xprt, seg);
235 rpcrdma_put_mw(r_xprt, seg->rl_mw);
240 236
241 i += seg->mr_nsegs; 237 i += seg->mr_nsegs;
242 seg->mr_nsegs = 0; 238 seg->mr_nsegs = 0;
239 seg->rl_mw = NULL;
243 } 240 }
244 241
245 req->rl_nchunks = 0; 242 req->rl_nchunks = 0;