blob: Add helper function for set up bitmask.
Change-Id: I1afcfc3523b20bdfd60d7e6787350dfa4880bc50 Signed-off-by: Cunyin Chang <cunyin.chang@intel.com> Reviewed-on: https://review.gerrithub.io/380853 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
721695e121
commit
1ae9dd67b6
@ -1455,6 +1455,21 @@ struct spdk_bs_load_ctx {
|
|||||||
struct spdk_bs_md_mask *mask;
|
struct spdk_bs_md_mask *mask;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
_spdk_bs_set_mask(struct spdk_bit_array *array, struct spdk_bs_md_mask *mask)
|
||||||
|
{
|
||||||
|
uint32_t i = 0;
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
i = spdk_bit_array_find_first_set(array, i);
|
||||||
|
if (i >= mask->length) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
mask->mask[i / 8] |= 1U << (i % 8);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_spdk_bs_load_used_clusters_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
|
_spdk_bs_load_used_clusters_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
|
||||||
{
|
{
|
||||||
@ -1928,7 +1943,6 @@ static void
|
|||||||
_spdk_bs_unload_write_used_pages_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
|
_spdk_bs_unload_write_used_pages_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
|
||||||
{
|
{
|
||||||
struct spdk_bs_unload_ctx *ctx = cb_arg;
|
struct spdk_bs_unload_ctx *ctx = cb_arg;
|
||||||
uint32_t i;
|
|
||||||
uint64_t lba, lba_count, mask_size;
|
uint64_t lba, lba_count, mask_size;
|
||||||
|
|
||||||
spdk_dma_free(ctx->mask);
|
spdk_dma_free(ctx->mask);
|
||||||
@ -1947,16 +1961,7 @@ _spdk_bs_unload_write_used_pages_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int
|
|||||||
ctx->mask->length = ctx->bs->total_clusters;
|
ctx->mask->length = ctx->bs->total_clusters;
|
||||||
assert(ctx->mask->length == spdk_bit_array_capacity(ctx->bs->used_clusters));
|
assert(ctx->mask->length == spdk_bit_array_capacity(ctx->bs->used_clusters));
|
||||||
|
|
||||||
i = 0;
|
_spdk_bs_set_mask(ctx->bs->used_clusters, ctx->mask);
|
||||||
while (true) {
|
|
||||||
i = spdk_bit_array_find_first_set(ctx->bs->used_clusters, i);
|
|
||||||
if (i > ctx->mask->length) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
ctx->mask->mask[i / 8] |= 1U << (i % 8);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
lba = _spdk_bs_page_to_lba(ctx->bs, ctx->super->used_cluster_mask_start);
|
lba = _spdk_bs_page_to_lba(ctx->bs, ctx->super->used_cluster_mask_start);
|
||||||
lba_count = _spdk_bs_page_to_lba(ctx->bs, ctx->super->used_cluster_mask_len);
|
lba_count = _spdk_bs_page_to_lba(ctx->bs, ctx->super->used_cluster_mask_len);
|
||||||
spdk_bs_sequence_write(seq, ctx->mask, lba, lba_count,
|
spdk_bs_sequence_write(seq, ctx->mask, lba, lba_count,
|
||||||
@ -1967,7 +1972,6 @@ static void
|
|||||||
_spdk_bs_unload_read_super_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
|
_spdk_bs_unload_read_super_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
|
||||||
{
|
{
|
||||||
struct spdk_bs_unload_ctx *ctx = cb_arg;
|
struct spdk_bs_unload_ctx *ctx = cb_arg;
|
||||||
uint32_t i;
|
|
||||||
uint64_t lba, lba_count, mask_size;
|
uint64_t lba, lba_count, mask_size;
|
||||||
|
|
||||||
/* Write out the used page mask */
|
/* Write out the used page mask */
|
||||||
@ -1984,16 +1988,7 @@ _spdk_bs_unload_read_super_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrn
|
|||||||
ctx->mask->length = ctx->super->md_len;
|
ctx->mask->length = ctx->super->md_len;
|
||||||
assert(ctx->mask->length == spdk_bit_array_capacity(ctx->bs->used_md_pages));
|
assert(ctx->mask->length == spdk_bit_array_capacity(ctx->bs->used_md_pages));
|
||||||
|
|
||||||
i = 0;
|
_spdk_bs_set_mask(ctx->bs->used_md_pages, ctx->mask);
|
||||||
while (true) {
|
|
||||||
i = spdk_bit_array_find_first_set(ctx->bs->used_md_pages, i);
|
|
||||||
if (i > ctx->mask->length) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
ctx->mask->mask[i / 8] |= 1U << (i % 8);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
lba = _spdk_bs_page_to_lba(ctx->bs, ctx->super->used_page_mask_start);
|
lba = _spdk_bs_page_to_lba(ctx->bs, ctx->super->used_page_mask_start);
|
||||||
lba_count = _spdk_bs_page_to_lba(ctx->bs, ctx->super->used_page_mask_len);
|
lba_count = _spdk_bs_page_to_lba(ctx->bs, ctx->super->used_page_mask_len);
|
||||||
spdk_bs_sequence_write(seq, ctx->mask, lba, lba_count,
|
spdk_bs_sequence_write(seq, ctx->mask, lba, lba_count,
|
||||||
|
Loading…
Reference in New Issue
Block a user