From 11ef5d396b32c3335a8c6fbefd8967c910e6bc0f Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Thu, 8 Dec 2016 09:59:56 -0700 Subject: [PATCH] nvme: Move hotplug monitor check inside _spdk_nvme_probe Move this down a level so it happens on all paths. Change-Id: Iea9913f0e102353882466c8dea4ee39abb857520 Signed-off-by: Ben Walker --- lib/nvme/nvme.c | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/lib/nvme/nvme.c b/lib/nvme/nvme.c index 12e265b50..3f4d93f4a 100644 --- a/lib/nvme/nvme.c +++ b/lib/nvme/nvme.c @@ -396,6 +396,10 @@ nvme_attach_one(void *cb_ctx, spdk_nvme_probe_cb probe_cb, spdk_nvme_attach_cb a return nvme_init_controllers(cb_ctx, attach_cb); } +static int +nvme_hotplug_monitor(void *cb_ctx, spdk_nvme_probe_cb probe_cb, spdk_nvme_attach_cb attach_cb, + spdk_nvme_remove_cb remove_cb); + static int _spdk_nvme_probe(const struct spdk_nvme_transport_id *trid, void *cb_ctx, spdk_nvme_probe_cb probe_cb, spdk_nvme_attach_cb attach_cb, @@ -411,13 +415,6 @@ _spdk_nvme_probe(const struct spdk_nvme_transport_id *trid, void *cb_ctx, nvme_robust_mutex_lock(&g_spdk_nvme_driver->lock); - if (hotplug_fd < 0) { - hotplug_fd = spdk_uevent_connect(); - if (hotplug_fd < 0) { - SPDK_ERRLOG("Failed to open uevent netlink socket\n"); - } - } - if (trid) { if (!spdk_nvme_transport_available(trid->trtype)) { SPDK_ERRLOG("NVMe over Fabrics trtype %u not available\n", trid->trtype); @@ -426,7 +423,20 @@ _spdk_nvme_probe(const struct spdk_nvme_transport_id *trid, void *cb_ctx, } } - nvme_transport_ctrlr_scan(trid, cb_ctx, probe_cb, remove_cb); + if (trid->trtype == SPDK_NVME_TRANSPORT_PCIE) { + if (hotplug_fd < 0) { + hotplug_fd = spdk_uevent_connect(); + if (hotplug_fd < 0) { + SPDK_ERRLOG("Failed to open uevent netlink socket\n"); + } + + nvme_transport_ctrlr_scan(trid, cb_ctx, probe_cb, remove_cb); + } else { + nvme_hotplug_monitor(cb_ctx, probe_cb, attach_cb, remove_cb); + } + } else { + nvme_transport_ctrlr_scan(trid, cb_ctx, probe_cb, remove_cb); + } if (!spdk_process_is_primary()) { TAILQ_FOREACH(ctrlr, &g_spdk_nvme_driver->attached_ctrlrs, tailq) { @@ -515,14 +525,10 @@ int spdk_nvme_probe(void *cb_ctx, spdk_nvme_probe_cb probe_cb, spdk_nvme_attach_cb attach_cb, spdk_nvme_remove_cb remove_cb) { - if (hotplug_fd < 0) { - struct spdk_nvme_transport_id trid = {}; + struct spdk_nvme_transport_id trid = {}; - trid.trtype = SPDK_NVME_TRANSPORT_PCIE; + trid.trtype = SPDK_NVME_TRANSPORT_PCIE; - return _spdk_nvme_probe(&trid, cb_ctx, probe_cb, attach_cb, remove_cb); - } else { - return nvme_hotplug_monitor(cb_ctx, probe_cb, attach_cb, remove_cb); - } + return _spdk_nvme_probe(&trid, cb_ctx, probe_cb, attach_cb, remove_cb); } SPDK_LOG_REGISTER_TRACE_FLAG("nvme", SPDK_TRACE_NVME)