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->data_ro_flags = desc_flags->data_ro_flags;
|
||||||
blob->md_ro_flags = desc_flags->md_ro_flags;
|
blob->md_ro_flags = desc_flags->md_ro_flags;
|
||||||
|
|
||||||
} else if (desc->type == SPDK_MD_DESCRIPTOR_TYPE_EXTENT) {
|
} else if (desc->type == SPDK_MD_DESCRIPTOR_TYPE_EXTENT_RLE) {
|
||||||
struct spdk_blob_md_descriptor_extent *desc_extent;
|
struct spdk_blob_md_descriptor_extent_rle *desc_extent_rle;
|
||||||
unsigned int i, j;
|
unsigned int i, j;
|
||||||
unsigned int cluster_count = blob->active.num_clusters;
|
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 ||
|
if (desc_extent_rle->length == 0 ||
|
||||||
(desc_extent->length % sizeof(desc_extent->extents[0]) != 0)) {
|
(desc_extent_rle->length % sizeof(desc_extent_rle->extents[0]) != 0)) {
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < desc_extent->length / sizeof(desc_extent->extents[0]); i++) {
|
for (i = 0; i < desc_extent_rle->length / sizeof(desc_extent_rle->extents[0]); i++) {
|
||||||
for (j = 0; j < desc_extent->extents[i].length; j++) {
|
for (j = 0; j < desc_extent_rle->extents[i].length; j++) {
|
||||||
if (desc_extent->extents[i].cluster_idx != 0) {
|
if (desc_extent_rle->extents[i].cluster_idx != 0) {
|
||||||
if (!spdk_bit_array_get(blob->bs->used_clusters,
|
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;
|
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.clusters = tmp;
|
||||||
blob->active.cluster_array_size = cluster_count;
|
blob->active.cluster_array_size = cluster_count;
|
||||||
|
|
||||||
for (i = 0; i < desc_extent->length / sizeof(desc_extent->extents[0]); i++) {
|
for (i = 0; i < desc_extent_rle->length / sizeof(desc_extent_rle->extents[0]); i++) {
|
||||||
for (j = 0; j < desc_extent->extents[i].length; j++) {
|
for (j = 0; j < desc_extent_rle->extents[i].length; j++) {
|
||||||
if (desc_extent->extents[i].cluster_idx != 0) {
|
if (desc_extent_rle->extents[i].cluster_idx != 0) {
|
||||||
blob->active.clusters[blob->active.num_clusters++] = _spdk_bs_cluster_to_lba(blob->bs,
|
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)) {
|
} else if (spdk_blob_is_thin_provisioned(blob)) {
|
||||||
blob->active.clusters[blob->active.num_clusters++] = 0;
|
blob->active.clusters[blob->active.num_clusters++] = 0;
|
||||||
} else {
|
} else {
|
||||||
@ -673,24 +673,24 @@ _spdk_blob_serialize_xattr(const struct spdk_xattr *xattr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_spdk_blob_serialize_extent(const struct spdk_blob *blob,
|
_spdk_blob_serialize_extent_rle(const struct spdk_blob *blob,
|
||||||
uint64_t start_cluster, uint64_t *next_cluster,
|
uint64_t start_cluster, uint64_t *next_cluster,
|
||||||
uint8_t *buf, size_t buf_sz)
|
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;
|
size_t cur_sz;
|
||||||
uint64_t i, extent_idx;
|
uint64_t i, extent_idx;
|
||||||
uint64_t lba, lba_per_cluster, lba_count;
|
uint64_t lba, lba_per_cluster, lba_count;
|
||||||
|
|
||||||
/* The buffer must have room for at least one extent */
|
/* 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) {
|
if (buf_sz < cur_sz) {
|
||||||
*next_cluster = start_cluster;
|
*next_cluster = start_cluster;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
desc = (struct spdk_blob_md_descriptor_extent *)buf;
|
desc_extent_rle = (struct spdk_blob_md_descriptor_extent_rle *)buf;
|
||||||
desc->type = SPDK_MD_DESCRIPTOR_TYPE_EXTENT;
|
desc_extent_rle->type = SPDK_MD_DESCRIPTOR_TYPE_EXTENT_RLE;
|
||||||
|
|
||||||
lba_per_cluster = _spdk_bs_cluster_to_lba(blob->bs, 1);
|
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;
|
lba_count += lba_per_cluster;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
desc->extents[extent_idx].cluster_idx = lba / lba_per_cluster;
|
desc_extent_rle->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].length = lba_count / lba_per_cluster;
|
||||||
extent_idx++;
|
extent_idx++;
|
||||||
|
|
||||||
cur_sz += sizeof(desc->extents[extent_idx]);
|
cur_sz += sizeof(desc_extent_rle->extents[extent_idx]);
|
||||||
|
|
||||||
if (buf_sz < cur_sz) {
|
if (buf_sz < cur_sz) {
|
||||||
/* If we ran out of buffer space, return */
|
/* 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;
|
*next_cluster = i;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -722,29 +722,29 @@ _spdk_blob_serialize_extent(const struct spdk_blob *blob,
|
|||||||
lba_count = lba_per_cluster;
|
lba_count = lba_per_cluster;
|
||||||
}
|
}
|
||||||
|
|
||||||
desc->extents[extent_idx].cluster_idx = lba / lba_per_cluster;
|
desc_extent_rle->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].length = lba_count / lba_per_cluster;
|
||||||
extent_idx++;
|
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;
|
*next_cluster = blob->active.num_clusters;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_spdk_blob_serialize_extents(const struct spdk_blob *blob,
|
_spdk_blob_serialize_extents_rle(const struct spdk_blob *blob,
|
||||||
struct spdk_blob_md_page **pages,
|
struct spdk_blob_md_page **pages,
|
||||||
struct spdk_blob_md_page *cur_page,
|
struct spdk_blob_md_page *cur_page,
|
||||||
uint32_t *page_count, uint8_t **buf,
|
uint32_t *page_count, uint8_t **buf,
|
||||||
size_t *remaining_sz)
|
size_t *remaining_sz)
|
||||||
{
|
{
|
||||||
uint64_t last_cluster;
|
uint64_t last_cluster;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
last_cluster = 0;
|
last_cluster = 0;
|
||||||
while (last_cluster < blob->active.num_clusters) {
|
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) {
|
if (last_cluster == blob->active.num_clusters) {
|
||||||
break;
|
break;
|
||||||
@ -881,7 +881,7 @@ _spdk_blob_serialize(const struct spdk_blob *blob, struct spdk_blob_md_page **pa
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Serialize extents */
|
/* 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;
|
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 */
|
/* If padding and length are 0, this terminates the page */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (desc->type == SPDK_MD_DESCRIPTOR_TYPE_EXTENT) {
|
} else if (desc->type == SPDK_MD_DESCRIPTOR_TYPE_EXTENT_RLE) {
|
||||||
struct spdk_blob_md_descriptor_extent *desc_extent;
|
struct spdk_blob_md_descriptor_extent_rle *desc_extent_rle;
|
||||||
unsigned int i, j;
|
unsigned int i, j;
|
||||||
unsigned int cluster_count = 0;
|
unsigned int cluster_count = 0;
|
||||||
uint32_t cluster_idx;
|
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 (i = 0; i < desc_extent_rle->length / sizeof(desc_extent_rle->extents[0]); i++) {
|
||||||
for (j = 0; j < desc_extent->extents[i].length; j++) {
|
for (j = 0; j < desc_extent_rle->extents[i].length; j++) {
|
||||||
cluster_idx = desc_extent->extents[i].cluster_idx;
|
cluster_idx = desc_extent_rle->extents[i].cluster_idx;
|
||||||
/*
|
/*
|
||||||
* cluster_idx = 0 means an unallocated cluster - don't mark that
|
* cluster_idx = 0 means an unallocated cluster - don't mark that
|
||||||
* in the used cluster map.
|
* 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 */
|
/* If padding and length are 0, this terminates the page */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (desc->type == SPDK_MD_DESCRIPTOR_TYPE_EXTENT) {
|
} else if (desc->type == SPDK_MD_DESCRIPTOR_TYPE_EXTENT_RLE) {
|
||||||
struct spdk_blob_md_descriptor_extent *desc_extent;
|
struct spdk_blob_md_descriptor_extent_rle *desc_extent_rle;
|
||||||
unsigned int i;
|
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++) {
|
for (i = 0; i < desc_extent_rle->length / sizeof(desc_extent_rle->extents[0]); i++) {
|
||||||
if (desc_extent->extents[i].cluster_idx != 0) {
|
if (desc_extent_rle->extents[i].cluster_idx != 0) {
|
||||||
fprintf(ctx->fp, "Allocated Extent - Start: %" PRIu32,
|
fprintf(ctx->fp, "Allocated Extent - Start: %" PRIu32,
|
||||||
desc_extent->extents[i].cluster_idx);
|
desc_extent_rle->extents[i].cluster_idx);
|
||||||
} else {
|
} else {
|
||||||
fprintf(ctx->fp, "Unallocated Extent - ");
|
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");
|
fprintf(ctx->fp, "\n");
|
||||||
}
|
}
|
||||||
} else if (desc->type == SPDK_MD_DESCRIPTOR_TYPE_XATTR) {
|
} 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_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_XATTR 2
|
||||||
#define SPDK_MD_DESCRIPTOR_TYPE_FLAGS 3
|
#define SPDK_MD_DESCRIPTOR_TYPE_FLAGS 3
|
||||||
#define SPDK_MD_DESCRIPTOR_TYPE_XATTR_INTERNAL 4
|
#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. */
|
/* String name immediately followed by string value. */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct spdk_blob_md_descriptor_extent {
|
struct spdk_blob_md_descriptor_extent_rle {
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
uint32_t length;
|
uint32_t length;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user