Commit 9dbbfab7 authored by Keith Busch's avatar Keith Busch Committed by Jens Axboe

NVMe: Do not over allocate for discard requests

Discard requests are often for very large ranges. The discard size is not
representative of the data transfer size so we don't need to allocate
for such a large prp list. This patch requests allocating only enough
for the memory needed for the data transfer and saves a little over 8k
of memory per max discard request.
Signed-off-by: default avatarKeith Busch <keith.busch@intel.com>
Reported-by: default avatarPaul Grabinar <paul.grabinar@ranbarg.com>
Signed-off-by: default avatarMatthew Wilcox <matthew.r.wilcox@intel.com>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 9e60352c
......@@ -763,11 +763,13 @@ static int nvme_submit_bio_queue(struct nvme_queue *nvmeq, struct nvme_ns *ns,
struct nvme_iod *iod;
int psegs = bio_phys_segments(ns->queue, bio);
int result;
unsigned size = !(bio->bi_rw & REQ_DISCARD) ? bio->bi_iter.bi_size :
sizeof(struct nvme_dsm_range);
if ((bio->bi_rw & REQ_FLUSH) && psegs)
return nvme_split_flush_data(nvmeq, bio);
iod = nvme_alloc_iod(psegs, bio->bi_iter.bi_size, ns->dev, GFP_ATOMIC);
iod = nvme_alloc_iod(psegs, size, ns->dev, GFP_ATOMIC);
if (!iod)
return -ENOMEM;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment