]> git.proxmox.com Git - mirror_ubuntu-disco-kernel.git/blobdiff - drivers/nvme/target/rdma.c
Merge tag 'pci-v4.20-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaa...
[mirror_ubuntu-disco-kernel.git] / drivers / nvme / target / rdma.c
index bd265aceb90c61a041186fc6717ace871d007266..ddce100be57a48f883558e147669a3d06f1046bb 100644 (file)
@@ -504,7 +504,7 @@ static void nvmet_rdma_release_rsp(struct nvmet_rdma_rsp *rsp)
        }
 
        if (rsp->req.sg != rsp->cmd->inline_sg)
-               sgl_free(rsp->req.sg);
+               nvmet_req_free_sgl(&rsp->req);
 
        if (unlikely(!list_empty_careful(&queue->rsp_wr_wait_list)))
                nvmet_rdma_process_wr_wait_list(queue);
@@ -653,24 +653,24 @@ static u16 nvmet_rdma_map_sgl_keyed(struct nvmet_rdma_rsp *rsp,
 {
        struct rdma_cm_id *cm_id = rsp->queue->cm_id;
        u64 addr = le64_to_cpu(sgl->addr);
-       u32 len = get_unaligned_le24(sgl->length);
        u32 key = get_unaligned_le32(sgl->key);
        int ret;
 
+       rsp->req.transfer_len = get_unaligned_le24(sgl->length);
+
        /* no data command? */
-       if (!len)
+       if (!rsp->req.transfer_len)
                return 0;
 
-       rsp->req.sg = sgl_alloc(len, GFP_KERNEL, &rsp->req.sg_cnt);
-       if (!rsp->req.sg)
-               return NVME_SC_INTERNAL;
+       ret = nvmet_req_alloc_sgl(&rsp->req);
+       if (ret < 0)
+               goto error_out;
 
        ret = rdma_rw_ctx_init(&rsp->rw, cm_id->qp, cm_id->port_num,
                        rsp->req.sg, rsp->req.sg_cnt, 0, addr, key,
                        nvmet_data_dir(&rsp->req));
        if (ret < 0)
-               return NVME_SC_INTERNAL;
-       rsp->req.transfer_len += len;
+               goto error_out;
        rsp->n_rdma += ret;
 
        if (invalidate) {
@@ -679,6 +679,10 @@ static u16 nvmet_rdma_map_sgl_keyed(struct nvmet_rdma_rsp *rsp,
        }
 
        return 0;
+
+error_out:
+       rsp->req.transfer_len = 0;
+       return NVME_SC_INTERNAL;
 }
 
 static u16 nvmet_rdma_map_sgl(struct nvmet_rdma_rsp *rsp)
@@ -746,6 +750,8 @@ static void nvmet_rdma_handle_command(struct nvmet_rdma_queue *queue,
                cmd->send_sge.addr, cmd->send_sge.length,
                DMA_TO_DEVICE);
 
+       cmd->req.p2p_client = &queue->dev->device->dev;
+
        if (!nvmet_req_init(&cmd->req, &queue->nvme_cq,
                        &queue->nvme_sq, &nvmet_rdma_ops))
                return;