diff options
-rw-r--r-- | net/sunrpc/xprtrdma/frwr_ops.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/sunrpc/xprtrdma/frwr_ops.c b/net/sunrpc/xprtrdma/frwr_ops.c index e16567389e28..ecb005f871f1 100644 --- a/net/sunrpc/xprtrdma/frwr_ops.c +++ b/net/sunrpc/xprtrdma/frwr_ops.c | |||
@@ -520,14 +520,18 @@ frwr_op_unmap_sync(struct rpcrdma_xprt *r_xprt, struct rpcrdma_req *req) | |||
520 | * unless ri_id->qp is a valid pointer. | 520 | * unless ri_id->qp is a valid pointer. |
521 | */ | 521 | */ |
522 | rc = ib_post_send(ia->ri_id->qp, invalidate_wrs, &bad_wr); | 522 | rc = ib_post_send(ia->ri_id->qp, invalidate_wrs, &bad_wr); |
523 | if (rc) | 523 | if (rc) { |
524 | pr_warn("%s: ib_post_send failed %i\n", __func__, rc); | 524 | pr_warn("%s: ib_post_send failed %i\n", __func__, rc); |
525 | rdma_disconnect(ia->ri_id); | ||
526 | goto unmap; | ||
527 | } | ||
525 | 528 | ||
526 | wait_for_completion(&f->fr_linv_done); | 529 | wait_for_completion(&f->fr_linv_done); |
527 | 530 | ||
528 | /* ORDER: Now DMA unmap all of the req's MRs, and return | 531 | /* ORDER: Now DMA unmap all of the req's MRs, and return |
529 | * them to the free MW list. | 532 | * them to the free MW list. |
530 | */ | 533 | */ |
534 | unmap: | ||
531 | for (i = 0, nchunks = req->rl_nchunks; nchunks; nchunks--) { | 535 | for (i = 0, nchunks = req->rl_nchunks; nchunks; nchunks--) { |
532 | seg = &req->rl_segments[i]; | 536 | seg = &req->rl_segments[i]; |
533 | 537 | ||