lib/blob: rename extents to extents_rle
In future patches new type of extents will be added, for compatibility the current extent type will be still handled in the code. To signify the difference between those two types, current type is renamed to SPDK_MD_DESCRIPTOR_TYPE_EXTENT_RLE. Along with any variables throughout the code, to make it clear which ones are used. There are no functional changes in this patch. Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Change-Id: I7186ccc452d200036188abf1dcea9660dcedee72 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/468230 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
41f2d0e448
commit
3e372f35c3
@ -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) {
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user