diff --git a/lib/blob/blobstore.c b/lib/blob/blobstore.c index 1179c870c..147b59852 100644 --- a/lib/blob/blobstore.c +++ b/lib/blob/blobstore.c @@ -474,23 +474,23 @@ _spdk_blob_parse_page(const struct spdk_blob_md_page *page, struct spdk_blob *bl blob->data_ro_flags = desc_flags->data_ro_flags; blob->md_ro_flags = desc_flags->md_ro_flags; - } else if (desc->type == SPDK_MD_DESCRIPTOR_TYPE_EXTENT) { - struct spdk_blob_md_descriptor_extent *desc_extent; + } else if (desc->type == SPDK_MD_DESCRIPTOR_TYPE_EXTENT_RLE) { + struct spdk_blob_md_descriptor_extent_rle *desc_extent_rle; unsigned int i, j; unsigned int cluster_count = blob->active.num_clusters; - desc_extent = (struct spdk_blob_md_descriptor_extent *)desc; + desc_extent_rle = (struct spdk_blob_md_descriptor_extent_rle *)desc; - if (desc_extent->length == 0 || - (desc_extent->length % sizeof(desc_extent->extents[0]) != 0)) { + if (desc_extent_rle->length == 0 || + (desc_extent_rle->length % sizeof(desc_extent_rle->extents[0]) != 0)) { return -EINVAL; } - for (i = 0; i < desc_extent->length / sizeof(desc_extent->extents[0]); i++) { - for (j = 0; j < desc_extent->extents[i].length; j++) { - if (desc_extent->extents[i].cluster_idx != 0) { + for (i = 0; i < desc_extent_rle->length / sizeof(desc_extent_rle->extents[0]); i++) { + for (j = 0; j < desc_extent_rle->extents[i].length; j++) { + if (desc_extent_rle->extents[i].cluster_idx != 0) { if (!spdk_bit_array_get(blob->bs->used_clusters, - desc_extent->extents[i].cluster_idx + j)) { + desc_extent_rle->extents[i].cluster_idx + j)) { return -EINVAL; } } @@ -508,11 +508,11 @@ _spdk_blob_parse_page(const struct spdk_blob_md_page *page, struct spdk_blob *bl blob->active.clusters = tmp; blob->active.cluster_array_size = cluster_count; - for (i = 0; i < desc_extent->length / sizeof(desc_extent->extents[0]); i++) { - for (j = 0; j < desc_extent->extents[i].length; j++) { - if (desc_extent->extents[i].cluster_idx != 0) { + for (i = 0; i < desc_extent_rle->length / sizeof(desc_extent_rle->extents[0]); i++) { + for (j = 0; j < desc_extent_rle->extents[i].length; j++) { + if (desc_extent_rle->extents[i].cluster_idx != 0) { blob->active.clusters[blob->active.num_clusters++] = _spdk_bs_cluster_to_lba(blob->bs, - desc_extent->extents[i].cluster_idx + j); + desc_extent_rle->extents[i].cluster_idx + j); } else if (spdk_blob_is_thin_provisioned(blob)) { blob->active.clusters[blob->active.num_clusters++] = 0; } else { @@ -673,24 +673,24 @@ _spdk_blob_serialize_xattr(const struct spdk_xattr *xattr, } static void -_spdk_blob_serialize_extent(const struct spdk_blob *blob, - uint64_t start_cluster, uint64_t *next_cluster, - uint8_t *buf, size_t buf_sz) +_spdk_blob_serialize_extent_rle(const struct spdk_blob *blob, + uint64_t start_cluster, uint64_t *next_cluster, + uint8_t *buf, size_t buf_sz) { - struct spdk_blob_md_descriptor_extent *desc; + struct spdk_blob_md_descriptor_extent_rle *desc_extent_rle; size_t cur_sz; uint64_t i, extent_idx; uint64_t lba, lba_per_cluster, lba_count; /* The buffer must have room for at least one extent */ - cur_sz = sizeof(struct spdk_blob_md_descriptor) + sizeof(desc->extents[0]); + cur_sz = sizeof(struct spdk_blob_md_descriptor) + sizeof(desc_extent_rle->extents[0]); if (buf_sz < cur_sz) { *next_cluster = start_cluster; return; } - desc = (struct spdk_blob_md_descriptor_extent *)buf; - desc->type = SPDK_MD_DESCRIPTOR_TYPE_EXTENT; + desc_extent_rle = (struct spdk_blob_md_descriptor_extent_rle *)buf; + desc_extent_rle->type = SPDK_MD_DESCRIPTOR_TYPE_EXTENT_RLE; lba_per_cluster = _spdk_bs_cluster_to_lba(blob->bs, 1); @@ -705,15 +705,15 @@ _spdk_blob_serialize_extent(const struct spdk_blob *blob, lba_count += lba_per_cluster; continue; } - desc->extents[extent_idx].cluster_idx = lba / lba_per_cluster; - desc->extents[extent_idx].length = lba_count / lba_per_cluster; + desc_extent_rle->extents[extent_idx].cluster_idx = lba / lba_per_cluster; + desc_extent_rle->extents[extent_idx].length = lba_count / lba_per_cluster; extent_idx++; - cur_sz += sizeof(desc->extents[extent_idx]); + cur_sz += sizeof(desc_extent_rle->extents[extent_idx]); if (buf_sz < cur_sz) { /* If we ran out of buffer space, return */ - desc->length = sizeof(desc->extents[0]) * extent_idx; + desc_extent_rle->length = sizeof(desc_extent_rle->extents[0]) * extent_idx; *next_cluster = i; return; } @@ -722,29 +722,29 @@ _spdk_blob_serialize_extent(const struct spdk_blob *blob, lba_count = lba_per_cluster; } - desc->extents[extent_idx].cluster_idx = lba / lba_per_cluster; - desc->extents[extent_idx].length = lba_count / lba_per_cluster; + desc_extent_rle->extents[extent_idx].cluster_idx = lba / lba_per_cluster; + desc_extent_rle->extents[extent_idx].length = lba_count / lba_per_cluster; extent_idx++; - desc->length = sizeof(desc->extents[0]) * extent_idx; + desc_extent_rle->length = sizeof(desc_extent_rle->extents[0]) * extent_idx; *next_cluster = blob->active.num_clusters; return; } static int -_spdk_blob_serialize_extents(const struct spdk_blob *blob, - struct spdk_blob_md_page **pages, - struct spdk_blob_md_page *cur_page, - uint32_t *page_count, uint8_t **buf, - size_t *remaining_sz) +_spdk_blob_serialize_extents_rle(const struct spdk_blob *blob, + struct spdk_blob_md_page **pages, + struct spdk_blob_md_page *cur_page, + uint32_t *page_count, uint8_t **buf, + size_t *remaining_sz) { uint64_t last_cluster; int rc; last_cluster = 0; while (last_cluster < blob->active.num_clusters) { - _spdk_blob_serialize_extent(blob, last_cluster, &last_cluster, *buf, *remaining_sz); + _spdk_blob_serialize_extent_rle(blob, last_cluster, &last_cluster, *buf, *remaining_sz); if (last_cluster == blob->active.num_clusters) { break; @@ -881,7 +881,7 @@ _spdk_blob_serialize(const struct spdk_blob *blob, struct spdk_blob_md_page **pa } /* Serialize extents */ - rc = _spdk_blob_serialize_extents(blob, pages, cur_page, page_count, &buf, &remaining_sz); + rc = _spdk_blob_serialize_extents_rle(blob, pages, cur_page, page_count, &buf, &remaining_sz); return rc; } @@ -3030,17 +3030,17 @@ _spdk_bs_load_replay_md_parse_page(const struct spdk_blob_md_page *page, struct /* If padding and length are 0, this terminates the page */ break; } - } else if (desc->type == SPDK_MD_DESCRIPTOR_TYPE_EXTENT) { - struct spdk_blob_md_descriptor_extent *desc_extent; + } else if (desc->type == SPDK_MD_DESCRIPTOR_TYPE_EXTENT_RLE) { + struct spdk_blob_md_descriptor_extent_rle *desc_extent_rle; unsigned int i, j; unsigned int cluster_count = 0; uint32_t cluster_idx; - desc_extent = (struct spdk_blob_md_descriptor_extent *)desc; + desc_extent_rle = (struct spdk_blob_md_descriptor_extent_rle *)desc; - for (i = 0; i < desc_extent->length / sizeof(desc_extent->extents[0]); i++) { - for (j = 0; j < desc_extent->extents[i].length; j++) { - cluster_idx = desc_extent->extents[i].cluster_idx; + for (i = 0; i < desc_extent_rle->length / sizeof(desc_extent_rle->extents[0]); i++) { + for (j = 0; j < desc_extent_rle->extents[i].length; j++) { + cluster_idx = desc_extent_rle->extents[i].cluster_idx; /* * cluster_idx = 0 means an unallocated cluster - don't mark that * in the used cluster map. @@ -3459,20 +3459,20 @@ _spdk_bs_dump_print_md_page(struct spdk_bs_dump_ctx *ctx) /* If padding and length are 0, this terminates the page */ break; } - } else if (desc->type == SPDK_MD_DESCRIPTOR_TYPE_EXTENT) { - struct spdk_blob_md_descriptor_extent *desc_extent; + } else if (desc->type == SPDK_MD_DESCRIPTOR_TYPE_EXTENT_RLE) { + struct spdk_blob_md_descriptor_extent_rle *desc_extent_rle; unsigned int i; - desc_extent = (struct spdk_blob_md_descriptor_extent *)desc; + desc_extent_rle = (struct spdk_blob_md_descriptor_extent_rle *)desc; - for (i = 0; i < desc_extent->length / sizeof(desc_extent->extents[0]); i++) { - if (desc_extent->extents[i].cluster_idx != 0) { + for (i = 0; i < desc_extent_rle->length / sizeof(desc_extent_rle->extents[0]); i++) { + if (desc_extent_rle->extents[i].cluster_idx != 0) { fprintf(ctx->fp, "Allocated Extent - Start: %" PRIu32, - desc_extent->extents[i].cluster_idx); + desc_extent_rle->extents[i].cluster_idx); } else { fprintf(ctx->fp, "Unallocated Extent - "); } - fprintf(ctx->fp, " Length: %" PRIu32, desc_extent->extents[i].length); + fprintf(ctx->fp, " Length: %" PRIu32, desc_extent_rle->extents[i].length); fprintf(ctx->fp, "\n"); } } else if (desc->type == SPDK_MD_DESCRIPTOR_TYPE_XATTR) { diff --git a/lib/blob/blobstore.h b/lib/blob/blobstore.h index 3ee23a891..32b46df6e 100644 --- a/lib/blob/blobstore.h +++ b/lib/blob/blobstore.h @@ -242,7 +242,7 @@ struct spdk_bs_md_mask { }; #define SPDK_MD_DESCRIPTOR_TYPE_PADDING 0 -#define SPDK_MD_DESCRIPTOR_TYPE_EXTENT 1 +#define SPDK_MD_DESCRIPTOR_TYPE_EXTENT_RLE 1 #define SPDK_MD_DESCRIPTOR_TYPE_XATTR 2 #define SPDK_MD_DESCRIPTOR_TYPE_FLAGS 3 #define SPDK_MD_DESCRIPTOR_TYPE_XATTR_INTERNAL 4 @@ -258,7 +258,7 @@ struct spdk_blob_md_descriptor_xattr { /* String name immediately followed by string value. */ }; -struct spdk_blob_md_descriptor_extent { +struct spdk_blob_md_descriptor_extent_rle { uint8_t type; uint32_t length;