From 93364164e5fa7b2a711a0563276b99ab56028bc3 Mon Sep 17 00:00:00 2001 From: Jacek Kalwas Date: Fri, 14 Jan 2022 13:01:12 -0500 Subject: [PATCH] nvmf: fix discovery log change notice execution it shall be executed on ctrlr's thread not subsystem's Signed-off-by: Jacek Kalwas Change-Id: I58c60525191085d3d6a583862ba5d71ea90940c7 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11105 Tested-by: SPDK CI Jenkins Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Reviewed-by: Aleksey Marchuk Reviewed-by: Konrad Sztyber Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- lib/nvmf/ctrlr.c | 11 ++++++----- lib/nvmf/ctrlr_discovery.c | 2 +- lib/nvmf/nvmf_internal.h | 2 +- .../lib/nvmf/ctrlr_discovery.c/ctrlr_discovery_ut.c | 4 +--- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index 8f0346ef0..bd6a44c17 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -3522,28 +3522,29 @@ nvmf_ctrlr_async_event_reservation_notification(struct spdk_nvmf_ctrlr *ctrlr) nvmf_ctrlr_async_event_notification(ctrlr, &event); } -int -nvmf_ctrlr_async_event_discovery_log_change_notice(struct spdk_nvmf_ctrlr *ctrlr) +void +nvmf_ctrlr_async_event_discovery_log_change_notice(void *ctx) { union spdk_nvme_async_event_completion event = {0}; + struct spdk_nvmf_ctrlr *ctrlr = ctx; /* Users may disable the event notification manually or * it may not be enabled due to keep alive timeout * not being set in connect command to discovery controller. */ if (!ctrlr->feat.async_event_configuration.bits.discovery_log_change_notice) { - return 0; + return; } if (!nvmf_ctrlr_mask_aen(ctrlr, SPDK_NVME_ASYNC_EVENT_DISCOVERY_LOG_CHANGE_MASK_BIT)) { - return 0; + return; } event.bits.async_event_type = SPDK_NVME_ASYNC_EVENT_TYPE_NOTICE; event.bits.async_event_info = SPDK_NVME_ASYNC_EVENT_DISCOVERY_LOG_CHANGE; event.bits.log_page_identifier = SPDK_NVME_LOG_DISCOVERY; - return nvmf_ctrlr_async_event_notification(ctrlr, &event); + nvmf_ctrlr_async_event_notification(ctrlr, &event); } int diff --git a/lib/nvmf/ctrlr_discovery.c b/lib/nvmf/ctrlr_discovery.c index 1727e6ce9..a6d7d6fae 100644 --- a/lib/nvmf/ctrlr_discovery.c +++ b/lib/nvmf/ctrlr_discovery.c @@ -61,7 +61,7 @@ nvmf_update_discovery_log(struct spdk_nvmf_tgt *tgt, const char *hostnqn) /** There is a change in discovery log for hosts with given hostnqn */ TAILQ_FOREACH(ctrlr, &discovery_subsystem->ctrlrs, link) { if (hostnqn == NULL || strcmp(hostnqn, ctrlr->hostnqn) == 0) { - nvmf_ctrlr_async_event_discovery_log_change_notice(ctrlr); + spdk_thread_send_msg(ctrlr->thread, nvmf_ctrlr_async_event_discovery_log_change_notice, ctrlr); } } } diff --git a/lib/nvmf/nvmf_internal.h b/lib/nvmf/nvmf_internal.h index e5842b03f..e35f172fb 100644 --- a/lib/nvmf/nvmf_internal.h +++ b/lib/nvmf/nvmf_internal.h @@ -457,7 +457,7 @@ int nvmf_subsystem_set_cntlid_range(struct spdk_nvmf_subsystem *subsystem, 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); -int nvmf_ctrlr_async_event_discovery_log_change_notice(struct spdk_nvmf_ctrlr *ctrlr); +void nvmf_ctrlr_async_event_discovery_log_change_notice(void *ctx); void nvmf_ctrlr_async_event_reservation_notification(struct spdk_nvmf_ctrlr *ctrlr); int nvmf_ctrlr_async_event_error_event(struct spdk_nvmf_ctrlr *ctrlr, union spdk_nvme_async_event_completion event); diff --git a/test/unit/lib/nvmf/ctrlr_discovery.c/ctrlr_discovery_ut.c b/test/unit/lib/nvmf/ctrlr_discovery.c/ctrlr_discovery_ut.c index 1ee2c5601..f05a9dec6 100644 --- a/test/unit/lib/nvmf/ctrlr_discovery.c/ctrlr_discovery_ut.c +++ b/test/unit/lib/nvmf/ctrlr_discovery.c/ctrlr_discovery_ut.c @@ -65,9 +65,7 @@ DEFINE_STUB(spdk_nvmf_transport_get_next, DEFINE_STUB_V(spdk_bdev_close, (struct spdk_bdev_desc *desc)); -DEFINE_STUB(nvmf_ctrlr_async_event_discovery_log_change_notice, - int, - (struct spdk_nvmf_ctrlr *ctrlr), 0); +DEFINE_STUB_V(nvmf_ctrlr_async_event_discovery_log_change_notice, (void *ctx)); DEFINE_STUB(spdk_nvmf_qpair_disconnect, int, (struct spdk_nvmf_qpair *qpair,