diff options
-rw-r--r-- | drivers/nvme/host/rdma.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c index c133256fd745..881ac28575ef 100644 --- a/drivers/nvme/host/rdma.c +++ b/drivers/nvme/host/rdma.c | |||
@@ -77,7 +77,6 @@ struct nvme_rdma_request { | |||
77 | u32 num_sge; | 77 | u32 num_sge; |
78 | int nents; | 78 | int nents; |
79 | bool inline_data; | 79 | bool inline_data; |
80 | bool need_inval; | ||
81 | struct ib_reg_wr reg_wr; | 80 | struct ib_reg_wr reg_wr; |
82 | struct ib_cqe reg_cqe; | 81 | struct ib_cqe reg_cqe; |
83 | struct nvme_rdma_queue *queue; | 82 | struct nvme_rdma_queue *queue; |
@@ -286,7 +285,7 @@ static int nvme_rdma_reinit_request(void *data, struct request *rq) | |||
286 | struct nvme_rdma_request *req = blk_mq_rq_to_pdu(rq); | 285 | struct nvme_rdma_request *req = blk_mq_rq_to_pdu(rq); |
287 | int ret = 0; | 286 | int ret = 0; |
288 | 287 | ||
289 | if (!req->need_inval) | 288 | if (!req->mr->need_inval) |
290 | goto out; | 289 | goto out; |
291 | 290 | ||
292 | ib_dereg_mr(req->mr); | 291 | ib_dereg_mr(req->mr); |
@@ -298,7 +297,7 @@ static int nvme_rdma_reinit_request(void *data, struct request *rq) | |||
298 | req->mr = NULL; | 297 | req->mr = NULL; |
299 | } | 298 | } |
300 | 299 | ||
301 | req->need_inval = false; | 300 | req->mr->need_inval = false; |
302 | 301 | ||
303 | out: | 302 | out: |
304 | return ret; | 303 | return ret; |
@@ -850,7 +849,7 @@ static void nvme_rdma_unmap_data(struct nvme_rdma_queue *queue, | |||
850 | if (!blk_rq_bytes(rq)) | 849 | if (!blk_rq_bytes(rq)) |
851 | return; | 850 | return; |
852 | 851 | ||
853 | if (req->need_inval) { | 852 | if (req->mr->need_inval) { |
854 | res = nvme_rdma_inv_rkey(queue, req); | 853 | res = nvme_rdma_inv_rkey(queue, req); |
855 | if (res < 0) { | 854 | if (res < 0) { |
856 | dev_err(ctrl->ctrl.device, | 855 | dev_err(ctrl->ctrl.device, |
@@ -936,7 +935,7 @@ static int nvme_rdma_map_sg_fr(struct nvme_rdma_queue *queue, | |||
936 | IB_ACCESS_REMOTE_READ | | 935 | IB_ACCESS_REMOTE_READ | |
937 | IB_ACCESS_REMOTE_WRITE; | 936 | IB_ACCESS_REMOTE_WRITE; |
938 | 937 | ||
939 | req->need_inval = true; | 938 | req->mr->need_inval = true; |
940 | 939 | ||
941 | sg->addr = cpu_to_le64(req->mr->iova); | 940 | sg->addr = cpu_to_le64(req->mr->iova); |
942 | put_unaligned_le24(req->mr->length, sg->length); | 941 | put_unaligned_le24(req->mr->length, sg->length); |
@@ -959,7 +958,7 @@ static int nvme_rdma_map_data(struct nvme_rdma_queue *queue, | |||
959 | 958 | ||
960 | req->num_sge = 1; | 959 | req->num_sge = 1; |
961 | req->inline_data = false; | 960 | req->inline_data = false; |
962 | req->need_inval = false; | 961 | req->mr->need_inval = false; |
963 | 962 | ||
964 | c->common.flags |= NVME_CMD_SGL_METABUF; | 963 | c->common.flags |= NVME_CMD_SGL_METABUF; |
965 | 964 | ||
@@ -1146,7 +1145,7 @@ static int nvme_rdma_process_nvme_rsp(struct nvme_rdma_queue *queue, | |||
1146 | 1145 | ||
1147 | if ((wc->wc_flags & IB_WC_WITH_INVALIDATE) && | 1146 | if ((wc->wc_flags & IB_WC_WITH_INVALIDATE) && |
1148 | wc->ex.invalidate_rkey == req->mr->rkey) | 1147 | wc->ex.invalidate_rkey == req->mr->rkey) |
1149 | req->need_inval = false; | 1148 | req->mr->need_inval = false; |
1150 | 1149 | ||
1151 | blk_mq_complete_request(rq, status); | 1150 | blk_mq_complete_request(rq, status); |
1152 | 1151 | ||
@@ -1476,7 +1475,7 @@ static int nvme_rdma_queue_rq(struct blk_mq_hw_ctx *hctx, | |||
1476 | if (rq->cmd_type == REQ_TYPE_FS && req_op(rq) == REQ_OP_FLUSH) | 1475 | if (rq->cmd_type == REQ_TYPE_FS && req_op(rq) == REQ_OP_FLUSH) |
1477 | flush = true; | 1476 | flush = true; |
1478 | ret = nvme_rdma_post_send(queue, sqe, req->sge, req->num_sge, | 1477 | ret = nvme_rdma_post_send(queue, sqe, req->sge, req->num_sge, |
1479 | req->need_inval ? &req->reg_wr.wr : NULL, flush); | 1478 | req->mr->need_inval ? &req->reg_wr.wr : NULL, flush); |
1480 | if (ret) { | 1479 | if (ret) { |
1481 | nvme_rdma_unmap_data(queue, rq); | 1480 | nvme_rdma_unmap_data(queue, rq); |
1482 | goto err; | 1481 | goto err; |