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: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Change-Id: I6e526e3f65f7f5bca0617888be06a5296422f8e0 Signed-off-by: Maciej Szwed <maciej.szwed@intel.com> Reviewed-on: https://review.gerrithub.io/371885 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
179ed697b3
commit
2fbe26160f
@ -1299,13 +1299,13 @@ _spdk_bs_channel_destroy(void *io_device, void *ctx_buf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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;
|
struct spdk_blob *blob, *blob_tmp;
|
||||||
|
|
||||||
spdk_bs_unregister_md_thread(bs);
|
bs = SPDK_CONTAINEROF(io_device, struct spdk_blob_store, md_target);
|
||||||
spdk_io_device_unregister(&bs->io_target, NULL);
|
bs->dev->destroy(bs->dev);
|
||||||
spdk_io_device_unregister(&bs->md_target, NULL);
|
|
||||||
|
|
||||||
TAILQ_FOREACH_SAFE(blob, &bs->blobs, link, blob_tmp) {
|
TAILQ_FOREACH_SAFE(blob, &bs->blobs, link, blob_tmp) {
|
||||||
TAILQ_REMOVE(&bs->blobs, blob, link);
|
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_md_pages);
|
||||||
spdk_bit_array_free(&bs->used_clusters);
|
spdk_bit_array_free(&bs->used_clusters);
|
||||||
|
|
||||||
bs->dev->destroy(bs->dev);
|
|
||||||
free(bs);
|
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
|
void
|
||||||
spdk_bs_opts_init(struct spdk_bs_opts *opts)
|
spdk_bs_opts_init(struct spdk_bs_opts *opts)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user