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
|
||||
_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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user