Commit 0b9cfae4 authored by Maciej Szwed's avatar Maciej Szwed Committed by Daniel Verkamp
Browse files

lvol: do not try to unload lvs until previous one is unloaded



With configuration where there are nested lvol stores we
encounter situation when hotremove and fini functions try
to unload the same lvol store second time (previous unloading
have not finished yet).

Signed-off-by: default avatarMaciej Szwed <maciej.szwed@intel.com>
Change-Id: Icb5d430d17024fbda0e6113b380d8f346a3e9a84

Reviewed-on: https://review.gerrithub.io/388790


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
parent 1d6dfe6f
Loading
Loading
Loading
Loading
+9 −12
Original line number Diff line number Diff line
@@ -777,26 +777,23 @@ vbdev_lvs_init(void)
}

static void
vbdev_lvs_finished(void *cb_arg, int lvserrno)
vbdev_lvs_fini_next(void *cb_arg, int lvserrno)
{
	if (TAILQ_EMPTY(&g_spdk_lvol_pairs)) {
	struct lvol_store_bdev *lvs_bdev;

	lvs_bdev = TAILQ_FIRST(&g_spdk_lvol_pairs);
	if (lvs_bdev == NULL) {
		spdk_bdev_module_finish_done();
		return;
	}

	vbdev_lvs_unload(lvs_bdev->lvs, vbdev_lvs_fini_next, cb_arg);
}

static void
vbdev_lvs_fini(void)
{
	struct lvol_store_bdev *lvs_bdev, *tmp;

	if (TAILQ_EMPTY(&g_spdk_lvol_pairs)) {
		spdk_bdev_module_finish_done();
		return;
	}

	TAILQ_FOREACH_SAFE(lvs_bdev, &g_spdk_lvol_pairs, lvol_stores, tmp) {
		vbdev_lvs_unload(lvs_bdev->lvs, vbdev_lvs_finished, NULL);
	}
	vbdev_lvs_fini_next(NULL, 0);
}

static int