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);
|
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.
|
* 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);
|
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
|
static void
|
||||||
blob_update_clear_method(struct spdk_blob *blob)
|
blob_update_clear_method(struct spdk_blob *blob)
|
||||||
{
|
{
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
spdk_blob_is_snapshot;
|
spdk_blob_is_snapshot;
|
||||||
spdk_blob_is_clone;
|
spdk_blob_is_clone;
|
||||||
spdk_blob_is_thin_provisioned;
|
spdk_blob_is_thin_provisioned;
|
||||||
|
spdk_blob_is_esnap_clone;
|
||||||
spdk_bs_delete_blob;
|
spdk_bs_delete_blob;
|
||||||
spdk_bs_inflate_blob;
|
spdk_bs_inflate_blob;
|
||||||
spdk_bs_blob_decouple_parent;
|
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. */
|
/* Create a normal blob and verify it is not an esnap clone. */
|
||||||
ut_spdk_blob_opts_init(&opts);
|
ut_spdk_blob_opts_init(&opts);
|
||||||
blob = ut_blob_create_and_open(bs, &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);
|
ut_blob_close_and_delete(bs, blob);
|
||||||
|
|
||||||
/* Create an esnap clone blob then verify it is an esnap clone and has the right size */
|
/* 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.esnap_id_len = sizeof(esnap_opts);
|
||||||
opts.num_clusters = esnap_num_clusters;
|
opts.num_clusters = esnap_num_clusters;
|
||||||
blob = ut_blob_create_and_open(bs, &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);
|
sz = spdk_blob_get_num_clusters(blob);
|
||||||
CU_ASSERT(sz == esnap_num_clusters);
|
CU_ASSERT(sz == esnap_num_clusters);
|
||||||
ut_blob_close_and_delete(bs, blob);
|
ut_blob_close_and_delete(bs, blob);
|
||||||
@ -7452,7 +7452,7 @@ blob_esnap_create(void)
|
|||||||
opts.esnap_id = &esnap_opts;
|
opts.esnap_id = &esnap_opts;
|
||||||
opts.esnap_id_len = sizeof(esnap_opts);
|
opts.esnap_id_len = sizeof(esnap_opts);
|
||||||
blob = ut_blob_create_and_open(bs, &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);
|
sz = spdk_blob_get_num_clusters(blob);
|
||||||
CU_ASSERT(sz == 0);
|
CU_ASSERT(sz == 0);
|
||||||
spdk_blob_resize(blob, 1, blob_op_complete, NULL);
|
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_bserrno == 0);
|
||||||
CU_ASSERT(g_blob != NULL);
|
CU_ASSERT(g_blob != NULL);
|
||||||
blob = g_blob;
|
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);
|
sz = spdk_blob_get_num_clusters(blob);
|
||||||
CU_ASSERT(sz == esnap_num_clusters + 1);
|
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 */
|
/* Opening the blob also triggers the esnap to be loaded */
|
||||||
CU_ASSERT(bs_ctx_count == 2);
|
CU_ASSERT(bs_ctx_count == 2);
|
||||||
blob = g_blob;
|
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);
|
sz = spdk_blob_get_num_clusters(blob);
|
||||||
CU_ASSERT(sz == esnap_num_clusters + 1);
|
CU_ASSERT(sz == esnap_num_clusters + 1);
|
||||||
spdk_blob_close(blob, blob_op_complete, NULL);
|
spdk_blob_close(blob, blob_op_complete, NULL);
|
||||||
|
Loading…
Reference in New Issue
Block a user