From c53af5d1dbfed2947ea95d1f77a60718eef363bc Mon Sep 17 00:00:00 2001 From: Swapnil Ingle Date: Tue, 26 Oct 2021 12:17:54 -0400 Subject: [PATCH] lib/nvmf: Set missing fields if OPTPERF is set MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As per the nvme specs, If OPTPERF is set to ‘1’ indicates that the fields NPWG, NPWA, NPDG, NPDA, and NOWS are defined for this namespace and should be used by the host for I/O optimization Setting NPWA, NPDG, NPDA same as NPWG and NOWS same as MDTS Fixes #2197 Signed-off-by: Swapnil Ingle Change-Id: Ic769a21b6821fa731eeae83e7d30c380e8092e37 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/10007 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Reviewed-by: Changpeng Liu Reviewed-by: Ben Walker Tested-by: SPDK CI Jenkins --- lib/nvmf/ctrlr.c | 5 +++++ lib/nvmf/ctrlr_bdev.c | 3 +++ 2 files changed, 8 insertions(+) diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index c285c7887..a1725c154 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -2426,6 +2426,11 @@ spdk_nvmf_ctrlr_identify_ns(struct spdk_nvmf_ctrlr *ctrlr, nsdata->noiob = max_num_blocks; } + /* Set NOWS equal to Controller MDTS */ + if (nsdata->nsfeat.optperf) { + nsdata->nows = max_num_blocks - 1; + } + if (subsystem->flags.ana_reporting) { assert(ns->anagrpid - 1 < subsystem->max_nsid); nsdata->anagrpid = ns->anagrpid; diff --git a/lib/nvmf/ctrlr_bdev.c b/lib/nvmf/ctrlr_bdev.c index 3dd78f7c8..52803879e 100644 --- a/lib/nvmf/ctrlr_bdev.c +++ b/lib/nvmf/ctrlr_bdev.c @@ -190,6 +190,9 @@ nvmf_bdev_ctrlr_identify_ns(struct spdk_nvmf_ns *ns, struct spdk_nvme_ns_data *n nsdata->nsfeat.ns_atomic_write_unit = 1; nsdata->npwg = (phys_blocklen >> nsdata->lbaf[0].lbads) - 1; nsdata->nawupf = nsdata->npwg; + nsdata->npwa = nsdata->npwg; + nsdata->npdg = nsdata->npwg; + nsdata->npda = nsdata->npwg; nsdata->noiob = spdk_bdev_get_optimal_io_boundary(bdev); nsdata->nmic.can_share = 1;