Commit c9b18a9f authored by Cunyin Chang's avatar Cunyin Chang Committed by Daniel Verkamp
Browse files

bdev/nvme: optimization of the process when destruct the nvme bdev.



This patch will make sure the nvme bdev work in correct way when we delete
bdev by using rpc method and then exit the app.

Change-Id: I19172440d46d96c7396282e1bef07d98ab601390
Signed-off-by: default avatarCunyin Chang <cunyin.chang@intel.com>
Reviewed-on: https://review.gerrithub.io/389930


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarDariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
parent 6d65bfcf
Loading
Loading
Loading
Loading
+4 −10
Original line number Diff line number Diff line
@@ -242,6 +242,7 @@ bdev_nvme_destruct(void *ctx)
	struct nvme_ctrlr *nvme_ctrlr = nvme_disk->nvme_ctrlr;

	pthread_mutex_lock(&g_bdev_nvme_mutex);
	TAILQ_REMOVE(&g_nvme_bdevs, nvme_disk, link);
	nvme_ctrlr->ref--;
	free(nvme_disk->disk.name);
	free(nvme_disk);
@@ -886,22 +887,16 @@ static void
remove_cb(void *cb_ctx, struct spdk_nvme_ctrlr *ctrlr)
{
	struct nvme_bdev *nvme_bdev, *btmp;
	TAILQ_HEAD(, nvme_bdev) removed_bdevs;

	TAILQ_INIT(&removed_bdevs);
	pthread_mutex_lock(&g_bdev_nvme_mutex);
	TAILQ_FOREACH_SAFE(nvme_bdev, &g_nvme_bdevs, link, btmp) {
		if (nvme_bdev->nvme_ctrlr->ctrlr == ctrlr) {
			TAILQ_REMOVE(&g_nvme_bdevs, nvme_bdev, link);
			TAILQ_INSERT_TAIL(&removed_bdevs, nvme_bdev, link);
		}
	}
			pthread_mutex_unlock(&g_bdev_nvme_mutex);

	TAILQ_FOREACH_SAFE(nvme_bdev, &removed_bdevs, link, btmp) {
		TAILQ_REMOVE(&removed_bdevs, nvme_bdev, link);
			spdk_bdev_unregister(&nvme_bdev->disk, NULL, NULL);
			pthread_mutex_lock(&g_bdev_nvme_mutex);
		}
	}
	pthread_mutex_unlock(&g_bdev_nvme_mutex);
}

static void
@@ -1119,7 +1114,6 @@ bdev_nvme_library_fini(void)
	}

	TAILQ_FOREACH_SAFE(nvme_bdev, &g_nvme_bdevs, link, btmp) {
		TAILQ_REMOVE(&g_nvme_bdevs, nvme_bdev, link);
		spdk_bdev_unregister(&nvme_bdev->disk, NULL, NULL);
	}
}