Commit 34d31cdc authored by Mike Gerdts's avatar Mike Gerdts Committed by Konrad Sztyber
Browse files

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: default avatarMike Gerdts <mgerdts@nvidia.com>
Change-Id: I78460aa3877481788118e2b0b76931dcf5c56338
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14972


Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
parent 4d5ee263
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -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) {