Commit 11ef5d39 authored by Ben Walker's avatar Ben Walker
Browse files

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: default avatarBen Walker <benjamin.walker@intel.com>
parent 06557b0a
Loading
Loading
Loading
Loading
+21 −15
Original line number Diff line number Diff line
@@ -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,
		}
	}

	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 = {};

	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);
	}
}
SPDK_LOG_REGISTER_TRACE_FLAG("nvme", SPDK_TRACE_NVME)