blobstore: fix serializing flags

This patch fixes issue when blobstore doesn't serialize flags
when there is also at least one extent or xattr. 

Signed-off-by: Piotr Pelplinski <piotr.pelplinski@intel.com>
Change-Id: I85d5031dc45df510cebe1acf4694ab62bca2e720

Reviewed-on: https://review.gerrithub.io/393770
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Piotr Pelplinski 2018-01-05 10:15:19 +01:00 committed by Jim Harris
parent db6d5f0e7b
commit 4bfe81b676
2 changed files with 13 additions and 0 deletions

View File

@ -559,6 +559,7 @@ _spdk_blob_serialize(const struct spdk_blob_data *blob, struct spdk_blob_md_page
/* Serialize flags */ /* Serialize flags */
_spdk_blob_serialize_flags(blob, buf, &remaining_sz); _spdk_blob_serialize_flags(blob, buf, &remaining_sz);
buf += sizeof(struct spdk_blob_md_descriptor_flags);
/* Serialize xattrs */ /* Serialize xattrs */
TAILQ_FOREACH(xattr, &blob->xattrs, link) { TAILQ_FOREACH(xattr, &blob->xattrs, link) {

View File

@ -2119,6 +2119,7 @@ blob_flags(void)
spdk_blob_id blobid_invalid, blobid_data_ro, blobid_md_ro; spdk_blob_id blobid_invalid, blobid_data_ro, blobid_md_ro;
struct spdk_blob *blob_invalid, *blob_data_ro, *blob_md_ro; struct spdk_blob *blob_invalid, *blob_data_ro, *blob_md_ro;
struct spdk_bs_opts opts; struct spdk_bs_opts opts;
int rc;
dev = init_dev(); dev = init_dev();
spdk_bs_opts_init(&opts); spdk_bs_opts_init(&opts);
@ -2159,6 +2160,16 @@ blob_flags(void)
SPDK_CU_ASSERT_FATAL(g_blob != NULL); SPDK_CU_ASSERT_FATAL(g_blob != NULL);
blob_md_ro = g_blob; blob_md_ro = g_blob;
/* Change the size of blob_data_ro to check if flags are serialized
* when blob has non zero number of extents */
rc = spdk_blob_resize(blob_data_ro, 10);
CU_ASSERT(rc == 0);
/* Set the xattr to check if flags are serialized
* when blob has non zero number of xattrs */
rc = spdk_blob_set_xattr(blob_md_ro, "name", "log.txt", strlen("log.txt") + 1);
CU_ASSERT(rc == 0);
__blob_to_data(blob_invalid)->invalid_flags = (1ULL << 63); __blob_to_data(blob_invalid)->invalid_flags = (1ULL << 63);
__blob_to_data(blob_invalid)->state = SPDK_BLOB_STATE_DIRTY; __blob_to_data(blob_invalid)->state = SPDK_BLOB_STATE_DIRTY;
__blob_to_data(blob_data_ro)->data_ro_flags = (1ULL << 62); __blob_to_data(blob_data_ro)->data_ro_flags = (1ULL << 62);
@ -2218,6 +2229,7 @@ blob_flags(void)
/* If an unknown data_ro flag was found, the blob should be marked both data and md read-only. */ /* If an unknown data_ro flag was found, the blob should be marked both data and md read-only. */
CU_ASSERT(__blob_to_data(blob_data_ro)->data_ro == true); CU_ASSERT(__blob_to_data(blob_data_ro)->data_ro == true);
CU_ASSERT(__blob_to_data(blob_data_ro)->md_ro == true); CU_ASSERT(__blob_to_data(blob_data_ro)->md_ro == true);
CU_ASSERT(spdk_blob_get_num_clusters(blob_data_ro) == 10);
g_blob = NULL; g_blob = NULL;
g_bserrno = -1; g_bserrno = -1;