Commit f41dbc23 authored by Jim Harris's avatar Jim Harris Committed by Tomasz Zawadzki
Browse files

nvme: always specify CC_CSS_NVM when CAP_CSS_IOCS is not set



At least one version of a known NVMe target erroneously reports
CAP_CSS_NOIO and not CAP_CSS_NVM for discovery controller. This results
in SPDK responding with CC_CSS_NOIO, which that target then rejects.

So adjust SPDK to follow similar behavior to the kernel, and
respond with CC_CSS_IOCS when CAP_CSS_IOCS is set, and CC_CSS_NVM in
all other cases.

Fixes issue #3445.

Signed-off-by: default avatarJim Harris <jim.harris@samsung.com>
Change-Id: I1bb0e30672b2e1c5db1cc6c82989eb014dd64022
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/24222


Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: default avatarBoris Glimcher <Boris.Glimcher@emc.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarMehakjot Sidhu <mehakjot.sidhu@nutanix.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 8ee2672c
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -1351,7 +1351,11 @@ nvme_ctrlr_enable(struct spdk_nvme_ctrlr *ctrlr)
		} else if (ctrlr->cap.bits.css & SPDK_NVME_CAP_CSS_NVM) {
			ctrlr->opts.command_set = SPDK_NVME_CC_CSS_NVM;
		} else if (ctrlr->cap.bits.css & SPDK_NVME_CAP_CSS_NOIO) {
			ctrlr->opts.command_set = SPDK_NVME_CC_CSS_NOIO;
			/* Technically we should respond with CC_CSS_NOIO in
			 * this case, but we use NVM instead to work around
			 * buggy targets and to match Linux driver behavior.
			 */
			ctrlr->opts.command_set = SPDK_NVME_CC_CSS_NVM;
		} else {
			/* Invalid supported bits detected, falling back to NVM. */
			ctrlr->opts.command_set = SPDK_NVME_CC_CSS_NVM;