lib/blob: move sequential extent page write to the caller
This will help with making the _spdk_blob_persist_write_extent_pages() batch all writes of extent pages. No functional change occurs with this patch, this is just refactor for future change. Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Change-Id: I8c93b1d6473db660f7ad5e04c8ec9f3331b2055c Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/986 Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
28a44891f1
commit
c65b591b7d
@ -1963,33 +1963,6 @@ _spdk_blob_persist_generate_new_md(struct spdk_blob_persist_ctx *ctx)
|
|||||||
_spdk_blob_persist_write_page_chain(seq, ctx, 0);
|
_spdk_blob_persist_write_page_chain(seq, ctx, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _spdk_blob_persist_write_extent_pages(spdk_bs_sequence_t *seq, void *cb_arg,
|
|
||||||
int bserrno);
|
|
||||||
|
|
||||||
static void
|
|
||||||
_spdk_blob_persist_write_extent_page(uint32_t extent, uint64_t cluster_num,
|
|
||||||
struct spdk_blob_persist_ctx *ctx)
|
|
||||||
{
|
|
||||||
spdk_bs_sequence_t *seq = ctx->seq;
|
|
||||||
uint32_t page_count = 0;
|
|
||||||
struct spdk_blob *blob = ctx->blob;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
rc = _spdk_blob_serialize_add_page(blob, &ctx->extent_page, &page_count, &ctx->extent_page);
|
|
||||||
if (rc < 0) {
|
|
||||||
assert(false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_spdk_blob_serialize_extent_page(blob, cluster_num, ctx->extent_page);
|
|
||||||
|
|
||||||
ctx->extent_page->crc = _spdk_blob_md_page_calc_crc(ctx->extent_page);
|
|
||||||
|
|
||||||
spdk_bs_sequence_write_dev(seq, ctx->extent_page, _spdk_bs_md_page_to_lba(blob->bs, extent),
|
|
||||||
_spdk_bs_byte_to_lba(blob->bs, SPDK_BS_PAGE_SIZE),
|
|
||||||
_spdk_blob_persist_write_extent_pages, ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_spdk_blob_persist_write_extent_pages(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
|
_spdk_blob_persist_write_extent_pages(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
|
||||||
{
|
{
|
||||||
@ -1997,6 +1970,8 @@ _spdk_blob_persist_write_extent_pages(spdk_bs_sequence_t *seq, void *cb_arg, int
|
|||||||
struct spdk_blob *blob = ctx->blob;
|
struct spdk_blob *blob = ctx->blob;
|
||||||
size_t i;
|
size_t i;
|
||||||
uint32_t extent_page_id;
|
uint32_t extent_page_id;
|
||||||
|
uint32_t page_count = 0;
|
||||||
|
int rc;
|
||||||
|
|
||||||
if (ctx->extent_page != NULL) {
|
if (ctx->extent_page != NULL) {
|
||||||
spdk_free(ctx->extent_page);
|
spdk_free(ctx->extent_page);
|
||||||
@ -2017,7 +1992,19 @@ _spdk_blob_persist_write_extent_pages(spdk_bs_sequence_t *seq, void *cb_arg, int
|
|||||||
blob->state = SPDK_BLOB_STATE_DIRTY;
|
blob->state = SPDK_BLOB_STATE_DIRTY;
|
||||||
assert(spdk_bit_array_get(blob->bs->used_md_pages, extent_page_id));
|
assert(spdk_bit_array_get(blob->bs->used_md_pages, extent_page_id));
|
||||||
ctx->next_extent_page = i + 1;
|
ctx->next_extent_page = i + 1;
|
||||||
_spdk_blob_persist_write_extent_page(extent_page_id, i * SPDK_EXTENTS_PER_EP, ctx);
|
rc = _spdk_blob_serialize_add_page(ctx->blob, &ctx->extent_page, &page_count, &ctx->extent_page);
|
||||||
|
if (rc < 0) {
|
||||||
|
assert(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_spdk_blob_serialize_extent_page(blob, i * SPDK_EXTENTS_PER_EP, ctx->extent_page);
|
||||||
|
|
||||||
|
ctx->extent_page->crc = _spdk_blob_md_page_calc_crc(ctx->extent_page);
|
||||||
|
|
||||||
|
spdk_bs_sequence_write_dev(seq, ctx->extent_page, _spdk_bs_md_page_to_lba(blob->bs, extent_page_id),
|
||||||
|
_spdk_bs_byte_to_lba(blob->bs, SPDK_BS_PAGE_SIZE),
|
||||||
|
_spdk_blob_persist_write_extent_pages, ctx);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
assert(blob->clean.extent_pages[i] != 0);
|
assert(blob->clean.extent_pages[i] != 0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user