From d7120a3ee88062e06049e195131c703522e1dfda Mon Sep 17 00:00:00 2001 From: Changpeng Liu Date: Fri, 26 Aug 2016 08:48:15 +0800 Subject: [PATCH] nvme: Fix max I/O size enforcement when no stripe size is specified Intel DC P3*** NVMe devices specify a desired stripe size, which was used for splitting I/O. Not all devices, however, specify a desired stripe size (such as the Intel DC D3*** line), and for only these devices there was a logic mistake that overwrote the maximum I/O size with a 2MB default. This patch corrects that error. Change-Id: I94b72a3a3dd1dfa18bd638daf7e01a592eb6ed17 Signed-off-by: Changpeng Liu Signed-off-by: Ben Walker --- lib/nvme/nvme_ctrlr.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index da290f479..29f683bc7 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -375,8 +375,6 @@ nvme_ctrlr_construct_io_qpairs(struct spdk_nvme_ctrlr *ctrlr) */ num_trackers = nvme_min(NVME_IO_TRACKERS, (num_entries - 1)); - ctrlr->max_xfer_size = NVME_MAX_XFER_SIZE; - ctrlr->ioq = calloc(ctrlr->opts.num_io_queues, sizeof(struct spdk_nvme_qpair)); if (ctrlr->ioq == NULL) @@ -598,6 +596,7 @@ nvme_ctrlr_identify(struct spdk_nvme_ctrlr *ctrlr) * Use MDTS to ensure our default max_xfer_size doesn't exceed what the * controller supports. */ + ctrlr->max_xfer_size = NVME_MAX_XFER_SIZE; if (ctrlr->cdata.mdts > 0) { ctrlr->max_xfer_size = nvme_min(ctrlr->max_xfer_size, ctrlr->min_page_size * (1 << (ctrlr->cdata.mdts)));