Commit ed65607c authored by Vasuki Manikarnike's avatar Vasuki Manikarnike Committed by Tomasz Zawadzki
Browse files

lib/nvme: Hold ctrlr->ctrlr_lock before calling nvme_ctrlr_fail



Fixes #1615

Signed-off-by: default avatarVasuki Manikarnike <vasuki.manikarnike@hpe.com>
Change-Id: Ib38f38a1086ec804222ccb94dfb3d41a85b62a8d
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4608


Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
parent 2475faff
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -550,7 +550,9 @@ nvme_ctrlr_poll_internal(struct spdk_nvme_ctrlr *ctrlr,
		/* Controller failed to initialize. */
		TAILQ_REMOVE(&probe_ctx->init_ctrlrs, ctrlr, tailq);
		SPDK_ERRLOG("Failed to initialize SSD: %s\n", ctrlr->trid.traddr);
		nvme_robust_mutex_lock(&ctrlr->ctrlr_lock);
		nvme_ctrlr_fail(ctrlr, false);
		nvme_robust_mutex_unlock(&ctrlr->ctrlr_lock);
		nvme_ctrlr_destruct(ctrlr);
		return rc;
	}
+4 −0
Original line number Diff line number Diff line
@@ -299,7 +299,9 @@ _nvme_pcie_hotplug_monitor(struct spdk_nvme_probe_ctx *probe_ctx)
				SPDK_DEBUGLOG(nvme, "remove nvme address: %s\n",
					      event.traddr);

				nvme_robust_mutex_lock(&ctrlr->ctrlr_lock);
				nvme_ctrlr_fail(ctrlr, true);
				nvme_robust_mutex_unlock(&ctrlr->ctrlr_lock);

				/* get the user app to clean up and stop I/O */
				if (ctrlr->remove_cb) {
@@ -328,7 +330,9 @@ _nvme_pcie_hotplug_monitor(struct spdk_nvme_probe_ctx *probe_ctx)
		}

		if (do_remove) {
			nvme_robust_mutex_lock(&ctrlr->ctrlr_lock);
			nvme_ctrlr_fail(ctrlr, true);
			nvme_robust_mutex_unlock(&ctrlr->ctrlr_lock);
			if (ctrlr->remove_cb) {
				nvme_robust_mutex_unlock(&g_spdk_nvme_driver->lock);
				ctrlr->remove_cb(probe_ctx->cb_ctx, ctrlr);