[ Upstream commit 
7637de311bd2124b298a072852448b940d8a34b9 ]
When running a NVMe device that is attached to a addressing
challenged PCIe root port that requires bounce buffering, our
request sizes can easily overflow the swiotlb bounce buffer
size.  Limit the maximum I/O size to the limit exposed by
the DMA mapping subsystem.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reported-by: Atish Patra <Atish.Patra@wdc.com>
Tested-by: Atish Patra <Atish.Patra@wdc.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Sasha Levin <sashal@kernel.org>
         * Limit the max command size to prevent iod->sg allocations going
         * over a single page.
         */
-       dev->ctrl.max_hw_sectors = NVME_MAX_KB_SZ << 1;
+       dev->ctrl.max_hw_sectors = min_t(u32,
+               NVME_MAX_KB_SZ << 1, dma_max_mapping_size(dev->dev) >> 9);
        dev->ctrl.max_segments = NVME_MAX_SEGS;
 
        /*