diff --git a/lib/nvmf/direct.c b/lib/nvmf/direct.c index a525e3b51..e8f1be128 100644 --- a/lib/nvmf/direct.c +++ b/lib/nvmf/direct.c @@ -176,10 +176,8 @@ nvmf_direct_ctrlr_process_admin_cmd(struct spdk_nvmf_request *req) } break; case SPDK_NVME_OPC_ASYNC_EVENT_REQUEST: - SPDK_TRACELOG(SPDK_TRACE_NVMF, "Async Event Request\n"); - session->aer_req = req; + return spdk_nvmf_session_async_event_request(req); - return SPDK_NVMF_REQUEST_EXEC_STATUS_ASYNCHRONOUS; case SPDK_NVME_OPC_KEEP_ALIVE: SPDK_TRACELOG(SPDK_TRACE_NVMF, "Keep Alive\n"); /* diff --git a/lib/nvmf/session.c b/lib/nvmf/session.c index 2826f8bc0..5a427030e 100644 --- a/lib/nvmf/session.c +++ b/lib/nvmf/session.c @@ -763,3 +763,14 @@ spdk_nvmf_session_get_features_async_event_configuration(struct spdk_nvmf_reques rsp->cdw0 = session->async_event_config.raw; return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE; } + +int +spdk_nvmf_session_async_event_request(struct spdk_nvmf_request *req) +{ + struct spdk_nvmf_session *session = req->conn->sess; + + SPDK_TRACELOG(SPDK_TRACE_NVMF, "Async Event Request\n"); + + session->aer_req = req; + return SPDK_NVMF_REQUEST_EXEC_STATUS_ASYNCHRONOUS; +} diff --git a/lib/nvmf/session.h b/lib/nvmf/session.h index 9079ea57b..9b5ff6cd4 100644 --- a/lib/nvmf/session.h +++ b/lib/nvmf/session.h @@ -129,4 +129,6 @@ int spdk_nvmf_session_get_features_number_of_queues(struct spdk_nvmf_request *re int spdk_nvmf_session_set_features_async_event_configuration(struct spdk_nvmf_request *req); int spdk_nvmf_session_get_features_async_event_configuration(struct spdk_nvmf_request *req); +int spdk_nvmf_session_async_event_request(struct spdk_nvmf_request *req); + #endif diff --git a/lib/nvmf/virtual.c b/lib/nvmf/virtual.c index a505071a9..9ed9e1a58 100644 --- a/lib/nvmf/virtual.c +++ b/lib/nvmf/virtual.c @@ -340,10 +340,7 @@ nvmf_virtual_ctrlr_process_admin_cmd(struct spdk_nvmf_request *req) case SPDK_NVME_OPC_SET_FEATURES: return nvmf_virtual_ctrlr_set_features(req); case SPDK_NVME_OPC_ASYNC_EVENT_REQUEST: - SPDK_TRACELOG(SPDK_TRACE_NVMF, "Async Event Request\n"); - /* TODO: Just release the request as consumed. AER events will never - * be triggered. */ - return SPDK_NVMF_REQUEST_EXEC_STATUS_RELEASE; + return spdk_nvmf_session_async_event_request(req); case SPDK_NVME_OPC_KEEP_ALIVE: SPDK_TRACELOG(SPDK_TRACE_NVMF, "Keep Alive\n"); /* diff --git a/test/lib/nvmf/direct/direct_ut.c b/test/lib/nvmf/direct/direct_ut.c index 6bbd9dbd3..2dba091e6 100644 --- a/test/lib/nvmf/direct/direct_ut.c +++ b/test/lib/nvmf/direct/direct_ut.c @@ -174,6 +174,12 @@ spdk_nvmf_session_get_features_async_event_configuration(struct spdk_nvmf_reques return -1; } +int +spdk_nvmf_session_async_event_request(struct spdk_nvmf_request *req) +{ + return -1; +} + /* test suite function */ static void nvmf_test_nvmf_direct_ctrlr_admin_identify_nslist(void) diff --git a/test/lib/nvmf/virtual/virtual_ut.c b/test/lib/nvmf/virtual/virtual_ut.c index beb18f364..c4ee0258a 100644 --- a/test/lib/nvmf/virtual/virtual_ut.c +++ b/test/lib/nvmf/virtual/virtual_ut.c @@ -88,6 +88,12 @@ spdk_nvmf_session_get_features_async_event_configuration(struct spdk_nvmf_reques return -1; } +int +spdk_nvmf_session_async_event_request(struct spdk_nvmf_request *req) +{ + return -1; +} + int spdk_nvmf_request_complete(struct spdk_nvmf_request *req) {