From 58da62239eff9e98adf830535849c5c79172bd11 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Tue, 1 Sep 2020 21:00:20 +0900 Subject: [PATCH] lib/nvmf: Add nvmf_ctrlr_async_event_ana_change_notice() to notice ANA change The new function () will be used in the following patches. Signed-off-by: Shuhei Matsumoto Change-Id: I788cfb38d75c3f1f64e1754912b776a80f0f1be8 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4007 Community-CI: Mellanox Build Bot Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Jim Harris Reviewed-by: Aleksey Marchuk --- lib/nvmf/ctrlr.c | 31 +++++++++++++++++++++++++++++++ lib/nvmf/nvmf_internal.h | 1 + 2 files changed, 32 insertions(+) diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index d35c47e0e..a872a0d59 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -2670,6 +2670,37 @@ nvmf_ctrlr_async_event_ns_notice(struct spdk_nvmf_ctrlr *ctrlr) return nvmf_ctrlr_async_event_notification(ctrlr, &event); } +int +nvmf_ctrlr_async_event_ana_change_notice(struct spdk_nvmf_ctrlr *ctrlr) +{ + union spdk_nvme_async_event_completion event = {0}; + + /* Users may disable the event notification */ + if (!ctrlr->feat.async_event_configuration.bits.ana_change_notice) { + return 0; + } + + event.bits.async_event_type = SPDK_NVME_ASYNC_EVENT_TYPE_NOTICE; + event.bits.async_event_info = SPDK_NVME_ASYNC_EVENT_ANA_CHANGE; + event.bits.log_page_identifier = SPDK_NVME_LOG_ASYMMETRIC_NAMESPACE_ACCESS; + + /* If there is no outstanding AER request, queue the event. Then + * if an AER is later submited, this event can be sent as a + * response. + */ + if (ctrlr->nr_aer_reqs == 0) { + if (ctrlr->notice_event.bits.async_event_type == + SPDK_NVME_ASYNC_EVENT_TYPE_NOTICE) { + return 0; + } + + ctrlr->notice_event.raw = event.raw; + return 0; + } + + return nvmf_ctrlr_async_event_notification(ctrlr, &event); +} + void nvmf_ctrlr_async_event_reservation_notification(struct spdk_nvmf_ctrlr *ctrlr) { diff --git a/lib/nvmf/nvmf_internal.h b/lib/nvmf/nvmf_internal.h index 73a07b6bf..c151fb03e 100644 --- a/lib/nvmf/nvmf_internal.h +++ b/lib/nvmf/nvmf_internal.h @@ -333,6 +333,7 @@ struct spdk_nvmf_listener *nvmf_transport_find_listener( const struct spdk_nvme_transport_id *trid); int nvmf_ctrlr_async_event_ns_notice(struct spdk_nvmf_ctrlr *ctrlr); +int nvmf_ctrlr_async_event_ana_change_notice(struct spdk_nvmf_ctrlr *ctrlr); void nvmf_ctrlr_async_event_reservation_notification(struct spdk_nvmf_ctrlr *ctrlr); void nvmf_ns_reservation_request(void *ctx); void nvmf_ctrlr_reservation_notice_log(struct spdk_nvmf_ctrlr *ctrlr,