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 <benjamin.walker@intel.com>
This commit is contained in:
Ben Walker 2016-12-08 09:59:56 -07:00
parent 06557b0a4d
commit 11ef5d396b

View File

@ -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)