diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index bd6a44c17..8100e361a 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -2897,6 +2897,8 @@ nvmf_qpair_abort_aer(struct spdk_nvmf_qpair *qpair, uint16_t cid) return false; } + assert(spdk_get_thread() == ctrlr->thread); + for (i = 0; i < ctrlr->nr_aer_reqs; i++) { if (ctrlr->aer_req[i]->cmd->nvme_cmd.cid == cid) { SPDK_DEBUGLOG(nvmf, "Aborting AER request\n"); @@ -3296,6 +3298,8 @@ nvmf_ctrlr_process_admin_cmd(struct spdk_nvmf_request *req) return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; } + assert(spdk_get_thread() == ctrlr->thread); + if (cmd->fuse != 0) { /* Fused admin commands are not supported. */ response->status.sct = SPDK_NVME_SCT_GENERIC; @@ -3440,6 +3444,8 @@ nvmf_ctrlr_async_event_notification(struct spdk_nvmf_ctrlr *ctrlr, struct spdk_nvmf_request *req; struct spdk_nvme_cpl *rsp; + assert(spdk_get_thread() == ctrlr->thread); + /* If there is no outstanding AER request, queue the event. Then * if an AER is later submitted, this event can be sent as a * response. @@ -3573,6 +3579,8 @@ nvmf_qpair_free_aer(struct spdk_nvmf_qpair *qpair) return; } + assert(spdk_get_thread() == ctrlr->thread); + for (i = 0; i < ctrlr->nr_aer_reqs; i++) { spdk_nvmf_request_free(ctrlr->aer_req[i]); ctrlr->aer_req[i] = NULL; @@ -3587,6 +3595,8 @@ nvmf_ctrlr_abort_aer(struct spdk_nvmf_ctrlr *ctrlr) struct spdk_nvmf_request *req; int i; + assert(spdk_get_thread() == ctrlr->thread); + if (!ctrlr->nr_aer_reqs) { return; } diff --git a/test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c b/test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c index 5c6a9479a..abaf4e363 100644 --- a/test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c +++ b/test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c @@ -874,6 +874,7 @@ test_get_ns_id_desc_list(void) memset(&ctrlr, 0, sizeof(ctrlr)); ctrlr.subsys = &subsystem; ctrlr.vcprop.cc.bits.en = 1; + ctrlr.thread = spdk_get_thread(); memset(&req, 0, sizeof(req)); req.qpair = &qpair; @@ -1639,6 +1640,7 @@ test_custom_admin_cmd(void) memset(&ctrlr, 0, sizeof(ctrlr)); ctrlr.subsys = &subsystem; ctrlr.vcprop.cc.bits.en = 1; + ctrlr.thread = spdk_get_thread(); memset(&req, 0, sizeof(req)); req.qpair = &qpair; @@ -1796,6 +1798,7 @@ test_multi_async_event_reqs(void) ctrlr.subsys = &subsystem; ctrlr.vcprop.cc.bits.en = 1; + ctrlr.thread = spdk_get_thread(); for (i = 0; i < 5; i++) { cmd[i].nvme_cmd.opc = SPDK_NVME_OPC_ASYNC_EVENT_REQUEST; @@ -2050,6 +2053,7 @@ test_multi_async_events(void) ctrlr.subsys = &subsystem; ctrlr.vcprop.cc.bits.en = 1; + ctrlr.thread = spdk_get_thread(); ctrlr.feat.async_event_configuration.bits.ns_attr_notice = 1; ctrlr.feat.async_event_configuration.bits.ana_change_notice = 1; ctrlr.feat.async_event_configuration.bits.discovery_log_change_notice = 1; @@ -2124,6 +2128,7 @@ test_rae(void) ctrlr.subsys = &subsystem; ctrlr.vcprop.cc.bits.en = 1; + ctrlr.thread = spdk_get_thread(); ctrlr.feat.async_event_configuration.bits.ns_attr_notice = 1; init_pending_async_events(&ctrlr);