Commit 073b9bf9 authored by Leon Romanovsky's avatar Leon Romanovsky Committed by Jens Axboe
Browse files

nvme-pci: Use size_t for length fields to handle larger sizes



This patch changes the length variables from unsigned int to size_t.
Using size_t ensures that we can handle larger sizes, as size_t is
always equal to or larger than the previously used u32 type.

Originally, u32 was used because blk-mq-dma code evolved from
scatter-gather implementation, which uses unsigned int to describe length.
This change will also allow us to reuse the existing struct phys_vec in places
that don't need scatter-gather.

Signed-off-by: default avatarLeon Romanovsky <leonro@nvidia.com>
Reviewed-by: default avatarChaitanya Kulkarni <kch@nvidia.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent f8f9c1f4
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@

struct phys_vec {
	phys_addr_t	paddr;
	u32		len;
	size_t		len;
};

static bool __blk_map_iter_next(struct blk_map_iter *iter)
@@ -112,8 +112,8 @@ static bool blk_rq_dma_map_iova(struct request *req, struct device *dma_dev,
		struct phys_vec *vec)
{
	enum dma_data_direction dir = rq_dma_dir(req);
	unsigned int mapped = 0;
	unsigned int attrs = 0;
	size_t mapped = 0;
	int error;

	iter->addr = state->addr;
@@ -297,6 +297,8 @@ int __blk_rq_map_sg(struct request *rq, struct scatterlist *sglist,
	blk_rq_map_iter_init(rq, &iter);
	while (blk_map_iter_next(rq, &iter, &vec)) {
		*last_sg = blk_next_sg(last_sg, sglist);

		WARN_ON_ONCE(overflows_type(vec.len, unsigned int));
		sg_set_page(*last_sg, phys_to_page(vec.paddr), vec.len,
				offset_in_page(vec.paddr));
		nsegs++;
@@ -417,6 +419,8 @@ int blk_rq_map_integrity_sg(struct request *rq, struct scatterlist *sglist)

	while (blk_map_iter_next(rq, &iter, &vec)) {
		sg = blk_next_sg(&sg, sglist);

		WARN_ON_ONCE(overflows_type(vec.len, unsigned int));
		sg_set_page(sg, phys_to_page(vec.paddr), vec.len,
				offset_in_page(vec.paddr));
		segments++;
+2 −2
Original line number Diff line number Diff line
@@ -290,14 +290,14 @@ struct nvme_iod {
	u8 flags;
	u8 nr_descriptors;

	unsigned int total_len;
	size_t total_len;
	struct dma_iova_state dma_state;
	void *descriptors[NVME_MAX_NR_DESCRIPTORS];
	struct nvme_dma_vec *dma_vecs;
	unsigned int nr_dma_vecs;

	dma_addr_t meta_dma;
	unsigned int meta_total_len;
	size_t meta_total_len;
	struct dma_iova_state meta_dma_state;
	struct nvme_sgl_desc *meta_descriptor;
};