nvme: use blk_rq_payload_bytes
The new blk_rq_payload_bytes generalizes the payload length hacks that nvme_map_len did before. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:

committed by
Jens Axboe

parent
fd102b125e
commit
b131c61d62
@@ -306,11 +306,11 @@ static __le64 **iod_list(struct request *req)
|
||||
return (__le64 **)(iod->sg + blk_rq_nr_phys_segments(req));
|
||||
}
|
||||
|
||||
static int nvme_init_iod(struct request *rq, unsigned size,
|
||||
struct nvme_dev *dev)
|
||||
static int nvme_init_iod(struct request *rq, struct nvme_dev *dev)
|
||||
{
|
||||
struct nvme_iod *iod = blk_mq_rq_to_pdu(rq);
|
||||
int nseg = blk_rq_nr_phys_segments(rq);
|
||||
unsigned int size = blk_rq_payload_bytes(rq);
|
||||
|
||||
if (nseg > NVME_INT_PAGES || size > NVME_INT_BYTES(dev)) {
|
||||
iod->sg = kmalloc(nvme_iod_alloc_size(dev, size, nseg), GFP_ATOMIC);
|
||||
@@ -420,12 +420,11 @@ static void nvme_dif_complete(u32 p, u32 v, struct t10_pi_tuple *pi)
|
||||
}
|
||||
#endif
|
||||
|
||||
static bool nvme_setup_prps(struct nvme_dev *dev, struct request *req,
|
||||
int total_len)
|
||||
static bool nvme_setup_prps(struct nvme_dev *dev, struct request *req)
|
||||
{
|
||||
struct nvme_iod *iod = blk_mq_rq_to_pdu(req);
|
||||
struct dma_pool *pool;
|
||||
int length = total_len;
|
||||
int length = blk_rq_payload_bytes(req);
|
||||
struct scatterlist *sg = iod->sg;
|
||||
int dma_len = sg_dma_len(sg);
|
||||
u64 dma_addr = sg_dma_address(sg);
|
||||
@@ -501,7 +500,7 @@ static bool nvme_setup_prps(struct nvme_dev *dev, struct request *req,
|
||||
}
|
||||
|
||||
static int nvme_map_data(struct nvme_dev *dev, struct request *req,
|
||||
unsigned size, struct nvme_command *cmnd)
|
||||
struct nvme_command *cmnd)
|
||||
{
|
||||
struct nvme_iod *iod = blk_mq_rq_to_pdu(req);
|
||||
struct request_queue *q = req->q;
|
||||
@@ -519,7 +518,7 @@ static int nvme_map_data(struct nvme_dev *dev, struct request *req,
|
||||
DMA_ATTR_NO_WARN))
|
||||
goto out;
|
||||
|
||||
if (!nvme_setup_prps(dev, req, size))
|
||||
if (!nvme_setup_prps(dev, req))
|
||||
goto out_unmap;
|
||||
|
||||
ret = BLK_MQ_RQ_QUEUE_ERROR;
|
||||
@@ -580,7 +579,6 @@ static int nvme_queue_rq(struct blk_mq_hw_ctx *hctx,
|
||||
struct nvme_dev *dev = nvmeq->dev;
|
||||
struct request *req = bd->rq;
|
||||
struct nvme_command cmnd;
|
||||
unsigned map_len;
|
||||
int ret = BLK_MQ_RQ_QUEUE_OK;
|
||||
|
||||
/*
|
||||
@@ -600,13 +598,12 @@ static int nvme_queue_rq(struct blk_mq_hw_ctx *hctx,
|
||||
if (ret != BLK_MQ_RQ_QUEUE_OK)
|
||||
return ret;
|
||||
|
||||
map_len = nvme_map_len(req);
|
||||
ret = nvme_init_iod(req, map_len, dev);
|
||||
ret = nvme_init_iod(req, dev);
|
||||
if (ret != BLK_MQ_RQ_QUEUE_OK)
|
||||
goto out_free_cmd;
|
||||
|
||||
if (blk_rq_nr_phys_segments(req))
|
||||
ret = nvme_map_data(dev, req, map_len, &cmnd);
|
||||
ret = nvme_map_data(dev, req, &cmnd);
|
||||
|
||||
if (ret != BLK_MQ_RQ_QUEUE_OK)
|
||||
goto out_cleanup_iod;
|
||||
|
Reference in New Issue
Block a user