aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/nvme/host/rdma.c15
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
303out: 302out:
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;