aboutsummaryrefslogtreecommitdiff
path: root/drivers/nvme/host/pci.c
diff options
context:
space:
mode:
authorGravatar Keith Busch <kbusch@kernel.org> 2023-02-10 10:03:46 -0800
committerGravatar Christoph Hellwig <hch@lst.de> 2023-02-14 06:40:52 +0100
commit8f0edf45bb676ec3558d6b668ad3f6a7d54cf601 (patch)
tree2467b7c480d82cf861ea209864bc081fd16dbd42 /drivers/nvme/host/pci.c
parentblock: ublk: check IO buffer based on flag need_get_data (diff)
downloadlinux-8f0edf45bb676ec3558d6b668ad3f6a7d54cf601.tar.gz
linux-8f0edf45bb676ec3558d6b668ad3f6a7d54cf601.tar.bz2
linux-8f0edf45bb676ec3558d6b668ad3f6a7d54cf601.zip
nvme-pci: fix freeing single sgl
There may only be a single DMA mapped entry from multiple physical segments, which means we don't allocate a separte SGL list. Check the number of allocations prior to know if we need to free something. Freeing a single list allocation is the same for both PRP and SGL usages, so we don't need to check the use_sgl flag anymore. Fixes: 01df742d8c5c0 ("nvme-pci: remove SGL segment descriptors") Reported-by: Niklas Schnelle <schnelle@linux.ibm.com> Signed-off-by: Keith Busch <kbusch@kernel.org> Signed-off-by: Christoph Hellwig <hch@lst.de> Tested-by: Niklas Schnelle <schnelle@linux.ibm.com>
Diffstat (limited to 'drivers/nvme/host/pci.c')
-rw-r--r--drivers/nvme/host/pci.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
index a331fbfa9a66..47d6b0023e3a 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -556,7 +556,7 @@ static void nvme_unmap_data(struct nvme_dev *dev, struct request *req)
if (iod->nr_allocations == 0)
dma_pool_free(dev->prp_small_pool, iod->list[0].sg_list,
iod->first_dma);
- else if (iod->use_sgl)
+ else if (iod->nr_allocations == 1)
dma_pool_free(dev->prp_page_pool, iod->list[0].sg_list,
iod->first_dma);
else