From e6668d8df67927d953965cdc5a7265e5fab0337c Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Fri, 4 Feb 2022 12:00:55 +0900 Subject: [PATCH] nvmf: ctrlr_get_ana_state() always returns optimized if ana_reporting is disabled if ctrlr->listener was NULL, nvmf_ctrlr_get_ana_state() returned inaccessible even if ana_reporting was disabled. Then the corresponding initiator received unexpected ANA error and could not process it appropriately. Change nvmf_ctrlr_get_ana_state() to return optimized always if ana_reporting is disabled. Additionally, check if ctrlr->listener is not NULL before calling SPDK_DTRACE_PROBE3(). Fixes #2335 Signed-off-by: Shuhei Matsumoto Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11402 (master) (cherry picked from commit c777cfa700a14a5212feaa7b1403fbe71e36688d) Change-Id: Ib2376694cf89d85ec5687fba7e87439f494f30b0 Signed-off-by: Krzysztof Karas Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12465 Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto --- lib/nvmf/ctrlr.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index 0aa8d4ca8..8dbf16c2d 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -2139,6 +2139,10 @@ typedef enum spdk_nvme_ana_state spdk_nvme_ana_state_t; static inline spdk_nvme_ana_state_t nvmf_ctrlr_get_ana_state(struct spdk_nvmf_ctrlr *ctrlr, uint32_t anagrpid) { + if (!ctrlr->subsys->flags.ana_reporting) { + return SPDK_NVME_ANA_OPTIMIZED_STATE; + } + if (spdk_unlikely(ctrlr->listener == NULL)) { return SPDK_NVME_ANA_INACCESSIBLE_STATE; } @@ -3952,9 +3956,11 @@ nvmf_ctrlr_process_io_cmd(struct spdk_nvmf_request *req) return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; } - SPDK_DTRACE_PROBE3(nvmf_request_io_exec_path, req, - req->qpair->ctrlr->listener->trid->traddr, - req->qpair->ctrlr->listener->trid->trsvcid); + if (spdk_likely(ctrlr->listener != NULL)) { + SPDK_DTRACE_PROBE3(nvmf_request_io_exec_path, req, + ctrlr->listener->trid->traddr, + ctrlr->listener->trid->trsvcid); + } /* scan-build falsely reporting dereference of null pointer */ assert(group != NULL && group->sgroups != NULL);