Commit 2fbe2616 authored by Tomasz Zawadzki's avatar Tomasz Zawadzki Committed by Jim Harris
Browse files

blobstore: defer destroying bs_dev



This patch delays destruction of bs_dev till after md_target io_device
is unregistered. Otherwise bs_dev would no longer exist when destroying
attached channels.

Signed-off-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Change-Id: I6e526e3f65f7f5bca0617888be06a5296422f8e0
Signed-off-by: default avatarMaciej Szwed <maciej.szwed@intel.com>
Reviewed-on: https://review.gerrithub.io/371885


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
parent 179ed697
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -1299,13 +1299,13 @@ _spdk_bs_channel_destroy(void *io_device, void *ctx_buf)
}

static void
_spdk_bs_free(struct spdk_blob_store *bs)
_spdk_bs_dev_destroy(void *io_device)
{
	struct spdk_blob_store *bs;
	struct spdk_blob	*blob, *blob_tmp;

	spdk_bs_unregister_md_thread(bs);
	spdk_io_device_unregister(&bs->io_target, NULL);
	spdk_io_device_unregister(&bs->md_target, NULL);
	bs = SPDK_CONTAINEROF(io_device, struct spdk_blob_store, md_target);
	bs->dev->destroy(bs->dev);

	TAILQ_FOREACH_SAFE(blob, &bs->blobs, link, blob_tmp) {
		TAILQ_REMOVE(&bs->blobs, blob, link);
@@ -1314,11 +1314,17 @@ _spdk_bs_free(struct spdk_blob_store *bs)

	spdk_bit_array_free(&bs->used_md_pages);
	spdk_bit_array_free(&bs->used_clusters);

	bs->dev->destroy(bs->dev);
	free(bs);
}

static void
_spdk_bs_free(struct spdk_blob_store *bs)
{
	spdk_bs_unregister_md_thread(bs);
	spdk_io_device_unregister(&bs->io_target, NULL);
	spdk_io_device_unregister(&bs->md_target, _spdk_bs_dev_destroy);
}

void
spdk_bs_opts_init(struct spdk_bs_opts *opts)
{