From d1fc4a28e95039be39c208e122b01123660e47f1 Mon Sep 17 00:00:00 2001 From: Alexey Marchuk Date: Wed, 11 Dec 2019 16:19:48 +0300 Subject: [PATCH] nvme/pci: fix mapping length initialization for contig SGL request mapping length is initialized with 0 and spdk_vtophys() returns min(*mapping_length, cur_size) or 0. So length -= mapping_length has no effect and req will be failed when nseg reaches NVME_MAX_SGL_DESCRIPTORS Initialize mapping_length = request length Signed-off-by: Alexey Marchuk Signed-off-by: Sasha Kotchubievsky Signed-off-by: Evgeniy Kochetov Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/477575 (master) Community-CI: SPDK CI Jenkins (cherry picked from commit a092fac4a2aad83fa7da5714311cf7e9a27ab9cd) Change-Id: I9082866b7f8055d99fa6930a78335b3b0fdf9b2b Signed-off-by: Tomasz Zawadzki Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/478356 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto Reviewed-by: Alexey Marchuk --- lib/nvme/nvme_pcie.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/nvme/nvme_pcie.c b/lib/nvme/nvme_pcie.c index f5d46acef..2bf5666bf 100644 --- a/lib/nvme/nvme_pcie.c +++ b/lib/nvme/nvme_pcie.c @@ -1840,6 +1840,7 @@ nvme_pcie_qpair_build_contig_hw_sgl_request(struct spdk_nvme_qpair *qpair, struc length = req->payload_size; virt_addr = req->payload.contig_or_cb_arg + req->payload_offset; + mapping_length = length; while (length > 0) { if (nseg >= NVME_MAX_SGL_DESCRIPTORS) {