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:
parent
db6d5f0e7b
commit
4bfe81b676
@ -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) {
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user