From 9ad05b31425ee3ceec3118a13f6f4ce9933d106f Mon Sep 17 00:00:00 2001 From: Changpeng Liu Date: Wed, 5 Sep 2018 23:30:54 -0400 Subject: [PATCH] nvme: return errno for nvme_ctrlr_set_supported_log_pages() Change-Id: I2fda87d6176e18f2face59c9d916db2b4631c05b Signed-off-by: Changpeng Liu Reviewed-on: https://review.gerrithub.io/424774 Tested-by: SPDK CI Jenkins Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: Jim Harris Reviewed-by: Ben Walker Reviewed-by: Shuhei Matsumoto --- lib/nvme/nvme_ctrlr.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index ce691f7a94..11132de2b8 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -368,6 +368,7 @@ nvme_ctrlr_construct_intel_support_log_page_list(struct spdk_nvme_ctrlr *ctrlr, static int nvme_ctrlr_set_intel_support_log_pages(struct spdk_nvme_ctrlr *ctrlr) { + int rc = 0; uint64_t phys_addr = 0; struct nvme_completion_poll_status status; struct spdk_nvme_intel_log_page_directory *log_page_directory; @@ -379,10 +380,15 @@ static int nvme_ctrlr_set_intel_support_log_pages(struct spdk_nvme_ctrlr *ctrlr) return -ENXIO; } - spdk_nvme_ctrlr_cmd_get_log_page(ctrlr, SPDK_NVME_INTEL_LOG_PAGE_DIRECTORY, SPDK_NVME_GLOBAL_NS_TAG, - log_page_directory, sizeof(struct spdk_nvme_intel_log_page_directory), 0, - nvme_completion_poll_cb, - &status); + rc = spdk_nvme_ctrlr_cmd_get_log_page(ctrlr, SPDK_NVME_INTEL_LOG_PAGE_DIRECTORY, + SPDK_NVME_GLOBAL_NS_TAG, log_page_directory, + sizeof(struct spdk_nvme_intel_log_page_directory), + 0, nvme_completion_poll_cb, &status); + if (rc != 0) { + spdk_free(log_page_directory); + return rc; + } + if (spdk_nvme_wait_for_completion(ctrlr->adminq, &status)) { spdk_free(log_page_directory); SPDK_ERRLOG("nvme_ctrlr_cmd_get_log_page failed!\n"); @@ -394,9 +400,11 @@ static int nvme_ctrlr_set_intel_support_log_pages(struct spdk_nvme_ctrlr *ctrlr) return 0; } -static void +static int nvme_ctrlr_set_supported_log_pages(struct spdk_nvme_ctrlr *ctrlr) { + int rc = 0; + memset(ctrlr->log_page_supported, 0, sizeof(ctrlr->log_page_supported)); /* Mandatory pages */ ctrlr->log_page_supported[SPDK_NVME_LOG_ERROR] = true; @@ -406,8 +414,10 @@ nvme_ctrlr_set_supported_log_pages(struct spdk_nvme_ctrlr *ctrlr) ctrlr->log_page_supported[SPDK_NVME_LOG_COMMAND_EFFECTS_LOG] = true; } if (ctrlr->cdata.vid == SPDK_PCI_VID_INTEL && !(ctrlr->quirks & NVME_INTEL_QUIRK_NO_LOG_PAGES)) { - nvme_ctrlr_set_intel_support_log_pages(ctrlr); + rc = nvme_ctrlr_set_intel_support_log_pages(ctrlr); } + + return rc; } static void @@ -1726,7 +1736,11 @@ nvme_ctrlr_start(struct spdk_nvme_ctrlr *ctrlr) return rc; } - nvme_ctrlr_set_supported_log_pages(ctrlr); + rc = nvme_ctrlr_set_supported_log_pages(ctrlr); + if (rc) { + return rc; + } + nvme_ctrlr_set_supported_features(ctrlr); rc = nvme_ctrlr_set_doorbell_buffer_config(ctrlr);