nvme-pci: allocate nvme_command within driver pdu
authorKeith Busch <kbusch@kernel.org>
Wed, 17 Mar 2021 20:37:02 +0000 (13:37 -0700)
committerChristoph Hellwig <hch@lst.de>
Fri, 2 Apr 2021 16:48:27 +0000 (18:48 +0200)
Except for pci, all the nvme transport drivers allocate a command within
the driver's pdu. Align pci with everyone else by allocating the nvme
command within pci's pdu and replace the .queue_rq() stack variable with
this.

Signed-off-by: Keith Busch <kbusch@kernel.org>
Reviewed-by: Jens Axboe <axboe@kernel.dk>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/host/pci.c

index ecd11b1..1a09121 100644 (file)
@@ -224,6 +224,7 @@ struct nvme_queue {
  */
 struct nvme_iod {
        struct nvme_request req;
+       struct nvme_command cmd;
        struct nvme_queue *nvmeq;
        bool use_sgl;
        int aborted;
@@ -917,7 +918,7 @@ static blk_status_t nvme_queue_rq(struct blk_mq_hw_ctx *hctx,
        struct nvme_dev *dev = nvmeq->dev;
        struct request *req = bd->rq;
        struct nvme_iod *iod = blk_mq_rq_to_pdu(req);
-       struct nvme_command cmnd;
+       struct nvme_command *cmnd = &iod->cmd;
        blk_status_t ret;
 
        iod->aborted = 0;
@@ -931,24 +932,24 @@ static blk_status_t nvme_queue_rq(struct blk_mq_hw_ctx *hctx,
        if (unlikely(!test_bit(NVMEQ_ENABLED, &nvmeq->flags)))
                return BLK_STS_IOERR;
 
-       ret = nvme_setup_cmd(ns, req, &cmnd);
+       ret = nvme_setup_cmd(ns, req, cmnd);
        if (ret)
                return ret;
 
        if (blk_rq_nr_phys_segments(req)) {
-               ret = nvme_map_data(dev, req, &cmnd);
+               ret = nvme_map_data(dev, req, cmnd);
                if (ret)
                        goto out_free_cmd;
        }
 
        if (blk_integrity_rq(req)) {
-               ret = nvme_map_metadata(dev, req, &cmnd);
+               ret = nvme_map_metadata(dev, req, cmnd);
                if (ret)
                        goto out_unmap_data;
        }
 
        blk_mq_start_request(req);
-       nvme_submit_cmd(nvmeq, &cmnd, bd->last);
+       nvme_submit_cmd(nvmeq, cmnd, bd->last);
        return BLK_STS_OK;
 out_unmap_data:
        nvme_unmap_data(dev, req);