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: Mike Gerdts <mgerdts@nvidia.com> Change-Id: Ie07cd09b30513893e82f1c85e94a24a93c79d71e Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16862 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Community-CI: Mellanox Build Bot
This commit is contained in:
parent
2948183f2b
commit
c64ce716e4
@ -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.
|
||||
*
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user