blob: refactor destruction of back_bs_dev
External snapshots have a slightly more complicated cleanup of back_bs_dev. This moves all calls to back_bs_dev->destroy() into a function so that this more complicated cleanup can have a single implementation. Signed-off-by: Mike Gerdts <mgerdts@nvidia.com> Change-Id: I78460aa3877481788118e2b0b76931dcf5c56338 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14972 Reviewed-by: Jim Harris <james.r.harris@intel.com> Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
4d5ee263b1
commit
34d31cdc20
@ -339,6 +339,13 @@ blob_free(struct spdk_blob *blob)
|
||||
free(blob);
|
||||
}
|
||||
|
||||
static void
|
||||
blob_back_bs_destroy(struct spdk_blob *blob)
|
||||
{
|
||||
blob->back_bs_dev->destroy(blob->back_bs_dev);
|
||||
blob->back_bs_dev = NULL;
|
||||
}
|
||||
|
||||
struct freeze_io_ctx {
|
||||
struct spdk_bs_cpl cpl;
|
||||
struct spdk_blob *blob;
|
||||
@ -6235,7 +6242,7 @@ bs_snapshot_freeze_cpl(void *cb_arg, int rc)
|
||||
ctx->frozen = true;
|
||||
|
||||
if (newblob->back_bs_dev) {
|
||||
newblob->back_bs_dev->destroy(newblob->back_bs_dev);
|
||||
blob_back_bs_destroy(newblob);
|
||||
}
|
||||
/* set new back_bs_dev for snapshot */
|
||||
newblob->back_bs_dev = origblob->back_bs_dev;
|
||||
@ -6532,7 +6539,7 @@ bs_inflate_blob_set_parent_cpl(void *cb_arg, struct spdk_blob *_parent, int bser
|
||||
bs_blob_list_remove(_blob);
|
||||
_blob->parent_id = _parent->id;
|
||||
|
||||
_blob->back_bs_dev->destroy(_blob->back_bs_dev);
|
||||
blob_back_bs_destroy(_blob);
|
||||
_blob->back_bs_dev = bs_create_blob_bs_dev(_parent);
|
||||
bs_blob_list_add(_blob);
|
||||
|
||||
@ -6549,8 +6556,7 @@ bs_inflate_blob_done(struct spdk_clone_snapshot_ctx *ctx)
|
||||
/* remove thin provisioning */
|
||||
bs_blob_list_remove(_blob);
|
||||
_blob->invalid_flags = _blob->invalid_flags & ~SPDK_BLOB_THIN_PROV;
|
||||
_blob->back_bs_dev->destroy(_blob->back_bs_dev);
|
||||
_blob->back_bs_dev = NULL;
|
||||
blob_back_bs_destroy(_blob);
|
||||
_blob->parent_id = SPDK_BLOBID_INVALID;
|
||||
} else {
|
||||
_parent = ((struct spdk_blob_bs_dev *)(_blob->back_bs_dev))->blob;
|
||||
@ -6563,7 +6569,7 @@ bs_inflate_blob_done(struct spdk_clone_snapshot_ctx *ctx)
|
||||
|
||||
bs_blob_list_remove(_blob);
|
||||
_blob->parent_id = SPDK_BLOBID_INVALID;
|
||||
_blob->back_bs_dev->destroy(_blob->back_bs_dev);
|
||||
blob_back_bs_destroy(_blob);
|
||||
_blob->back_bs_dev = bs_create_zeroes_dev();
|
||||
}
|
||||
|
||||
@ -7042,7 +7048,7 @@ static void
|
||||
delete_snapshot_update_extent_pages_cpl(struct delete_snapshot_ctx *ctx)
|
||||
{
|
||||
/* Delete old backing bs_dev from clone (related to snapshot that will be removed) */
|
||||
ctx->clone->back_bs_dev->destroy(ctx->clone->back_bs_dev);
|
||||
blob_back_bs_destroy(ctx->clone);
|
||||
|
||||
/* Set/remove snapshot xattr and switch parent ID and backing bs_dev on clone... */
|
||||
if (ctx->parent_snapshot_entry != NULL) {
|
||||
|
Loading…
Reference in New Issue
Block a user