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

blob: add spdk_blob_is_esnap_clone



Add an API to easily determine if a blob is an esnap clone, similar to
what already exists for snapshot, clone, and thin_provisioned.

Signed-off-by: default avatarMike Gerdts <mgerdts@nvidia.com>
Change-Id: Ie07cd09b30513893e82f1c85e94a24a93c79d71e
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16862


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Community-CI: Mellanox Build Bot
parent 2948183f
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -701,6 +701,15 @@ bool spdk_blob_is_clone(struct spdk_blob *blob);
 */
bool spdk_blob_is_thin_provisioned(struct spdk_blob *blob);

/**
 * Check if blob is a clone of an external bdev.
 *
 * \param blob Blob.
 *
 * \return true if blob is a clone of an external bdev.
 */
bool spdk_blob_is_esnap_clone(const struct spdk_blob *blob);

/**
 * Delete an existing blob from the given blobstore.
 *
+6 −0
Original line number Diff line number Diff line
@@ -8242,6 +8242,12 @@ spdk_blob_is_thin_provisioned(struct spdk_blob *blob)
	return !!(blob->invalid_flags & SPDK_BLOB_THIN_PROV);
}

bool
spdk_blob_is_esnap_clone(const struct spdk_blob *blob)
{
	return blob_is_esnap_clone(blob);
}

static void
blob_update_clear_method(struct spdk_blob *blob)
{
+1 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@
	spdk_blob_is_snapshot;
	spdk_blob_is_clone;
	spdk_blob_is_thin_provisioned;
	spdk_blob_is_esnap_clone;
	spdk_bs_delete_blob;
	spdk_bs_inflate_blob;
	spdk_bs_blob_decouple_parent;
+5 −5
Original line number Diff line number Diff line
@@ -7431,7 +7431,7 @@ blob_esnap_create(void)
	/* Create a normal blob and verify it is not an esnap clone. */
	ut_spdk_blob_opts_init(&opts);
	blob = ut_blob_create_and_open(bs, &opts);
	CU_ASSERT(!blob_is_esnap_clone(blob));
	CU_ASSERT(!spdk_blob_is_esnap_clone(blob));
	ut_blob_close_and_delete(bs, blob);

	/* Create an esnap clone blob then verify it is an esnap clone and has the right size */
@@ -7441,7 +7441,7 @@ blob_esnap_create(void)
	opts.esnap_id_len = sizeof(esnap_opts);
	opts.num_clusters = esnap_num_clusters;
	blob = ut_blob_create_and_open(bs, &opts);
	SPDK_CU_ASSERT_FATAL(blob_is_esnap_clone(blob));
	SPDK_CU_ASSERT_FATAL(spdk_blob_is_esnap_clone(blob));
	sz = spdk_blob_get_num_clusters(blob);
	CU_ASSERT(sz == esnap_num_clusters);
	ut_blob_close_and_delete(bs, blob);
@@ -7452,7 +7452,7 @@ blob_esnap_create(void)
	opts.esnap_id = &esnap_opts;
	opts.esnap_id_len = sizeof(esnap_opts);
	blob = ut_blob_create_and_open(bs, &opts);
	SPDK_CU_ASSERT_FATAL(blob_is_esnap_clone(blob));
	SPDK_CU_ASSERT_FATAL(spdk_blob_is_esnap_clone(blob));
	sz = spdk_blob_get_num_clusters(blob);
	CU_ASSERT(sz == 0);
	spdk_blob_resize(blob, 1, blob_op_complete, NULL);
@@ -7485,7 +7485,7 @@ blob_esnap_create(void)
	CU_ASSERT(g_bserrno == 0);
	CU_ASSERT(g_blob != NULL);
	blob = g_blob;
	SPDK_CU_ASSERT_FATAL(blob_is_esnap_clone(blob));
	SPDK_CU_ASSERT_FATAL(spdk_blob_is_esnap_clone(blob));
	sz = spdk_blob_get_num_clusters(blob);
	CU_ASSERT(sz == esnap_num_clusters + 1);

@@ -7516,7 +7516,7 @@ blob_esnap_create(void)
	/* Opening the blob also triggers the esnap to be loaded */
	CU_ASSERT(bs_ctx_count == 2);
	blob = g_blob;
	SPDK_CU_ASSERT_FATAL(blob_is_esnap_clone(blob));
	SPDK_CU_ASSERT_FATAL(spdk_blob_is_esnap_clone(blob));
	sz = spdk_blob_get_num_clusters(blob);
	CU_ASSERT(sz == esnap_num_clusters + 1);
	spdk_blob_close(blob, blob_op_complete, NULL);