lib/blob: save sequence immidietly on bs_load/unload
Assigning seq to ctx was done very late in the process. To keep future functions lean and without the seq, it is assigned immidietly after starting. Only functions in load path that require separate seq argument are those passed directly to read/write device operations. Rest of them can just use spdk_bs_load_ctx. Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Change-Id: I2bd610dc4c7b4a7b0c3de92391922475c514326a Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/481899 Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
bbbe586b28
commit
7167f8d334
@ -2907,9 +2907,8 @@ _spdk_bs_load_iter(void *arg, struct spdk_blob *blob, int bserrno)
|
||||
}
|
||||
|
||||
static void
|
||||
_spdk_bs_load_complete(spdk_bs_sequence_t *seq, struct spdk_bs_load_ctx *ctx, int bserrno)
|
||||
_spdk_bs_load_complete(struct spdk_bs_load_ctx *ctx, int bserrno)
|
||||
{
|
||||
ctx->seq = seq;
|
||||
spdk_bs_iter_first(ctx->bs, _spdk_bs_load_iter, ctx);
|
||||
}
|
||||
|
||||
@ -2937,7 +2936,7 @@ _spdk_bs_load_used_blobids_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrn
|
||||
return;
|
||||
}
|
||||
|
||||
_spdk_bs_load_complete(seq, ctx, bserrno);
|
||||
_spdk_bs_load_complete(ctx, bserrno);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -3020,9 +3019,8 @@ _spdk_bs_load_used_pages_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
|
||||
}
|
||||
|
||||
static void
|
||||
_spdk_bs_load_read_used_pages(spdk_bs_sequence_t *seq, void *cb_arg)
|
||||
_spdk_bs_load_read_used_pages(struct spdk_bs_load_ctx *ctx)
|
||||
{
|
||||
struct spdk_bs_load_ctx *ctx = cb_arg;
|
||||
uint64_t lba, lba_count, mask_size;
|
||||
|
||||
/* Read the used pages mask */
|
||||
@ -3030,13 +3028,13 @@ _spdk_bs_load_read_used_pages(spdk_bs_sequence_t *seq, void *cb_arg)
|
||||
ctx->mask = spdk_zmalloc(mask_size, 0x1000, NULL,
|
||||
SPDK_ENV_SOCKET_ID_ANY, SPDK_MALLOC_DMA);
|
||||
if (!ctx->mask) {
|
||||
_spdk_bs_load_ctx_fail(seq, ctx, -ENOMEM);
|
||||
_spdk_bs_load_ctx_fail(ctx->seq, ctx, -ENOMEM);
|
||||
return;
|
||||
}
|
||||
|
||||
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);
|
||||
spdk_bs_sequence_read_dev(seq, ctx->mask, lba, lba_count,
|
||||
spdk_bs_sequence_read_dev(ctx->seq, ctx->mask, lba, lba_count,
|
||||
_spdk_bs_load_used_pages_cpl, ctx);
|
||||
}
|
||||
|
||||
@ -3118,14 +3116,14 @@ static bool _spdk_bs_load_cur_md_page_valid(struct spdk_bs_load_ctx *ctx)
|
||||
}
|
||||
|
||||
static void
|
||||
_spdk_bs_load_replay_cur_md_page(spdk_bs_sequence_t *seq, void *cb_arg);
|
||||
_spdk_bs_load_replay_cur_md_page(struct spdk_bs_load_ctx *ctx);
|
||||
|
||||
static void
|
||||
_spdk_bs_load_write_used_clusters_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
|
||||
{
|
||||
struct spdk_bs_load_ctx *ctx = cb_arg;
|
||||
|
||||
_spdk_bs_load_complete(seq, ctx, bserrno);
|
||||
_spdk_bs_load_complete(ctx, bserrno);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -3151,9 +3149,9 @@ _spdk_bs_load_write_used_pages_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bs
|
||||
}
|
||||
|
||||
static void
|
||||
_spdk_bs_load_write_used_md(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
|
||||
_spdk_bs_load_write_used_md(struct spdk_bs_load_ctx *ctx, int bserrno)
|
||||
{
|
||||
_spdk_bs_write_used_md(seq, cb_arg, _spdk_bs_load_write_used_pages_cpl);
|
||||
_spdk_bs_write_used_md(ctx->seq, ctx, _spdk_bs_load_write_used_pages_cpl);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -3183,7 +3181,7 @@ _spdk_bs_load_replay_md_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
|
||||
if (ctx->page->next != SPDK_INVALID_MD_PAGE) {
|
||||
ctx->in_page_chain = true;
|
||||
ctx->cur_page = ctx->page->next;
|
||||
_spdk_bs_load_replay_cur_md_page(seq, ctx);
|
||||
_spdk_bs_load_replay_cur_md_page(ctx);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -3197,7 +3195,7 @@ _spdk_bs_load_replay_md_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
|
||||
|
||||
if (ctx->page_index < ctx->super->md_len) {
|
||||
ctx->cur_page = ctx->page_index;
|
||||
_spdk_bs_load_replay_cur_md_page(seq, ctx);
|
||||
_spdk_bs_load_replay_cur_md_page(ctx);
|
||||
} else {
|
||||
/* Claim all of the clusters used by the metadata */
|
||||
num_md_clusters = spdk_divide_round_up(ctx->super->md_len, ctx->bs->pages_per_cluster);
|
||||
@ -3205,65 +3203,61 @@ _spdk_bs_load_replay_md_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
|
||||
_spdk_bs_claim_cluster(ctx->bs, i);
|
||||
}
|
||||
spdk_free(ctx->page);
|
||||
_spdk_bs_load_write_used_md(seq, ctx, bserrno);
|
||||
_spdk_bs_load_write_used_md(ctx, bserrno);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_spdk_bs_load_replay_cur_md_page(spdk_bs_sequence_t *seq, void *cb_arg)
|
||||
_spdk_bs_load_replay_cur_md_page(struct spdk_bs_load_ctx *ctx)
|
||||
{
|
||||
struct spdk_bs_load_ctx *ctx = cb_arg;
|
||||
uint64_t lba;
|
||||
|
||||
assert(ctx->cur_page < ctx->super->md_len);
|
||||
lba = _spdk_bs_md_page_to_lba(ctx->bs, ctx->cur_page);
|
||||
spdk_bs_sequence_read_dev(seq, ctx->page, lba,
|
||||
spdk_bs_sequence_read_dev(ctx->seq, ctx->page, lba,
|
||||
_spdk_bs_byte_to_lba(ctx->bs, SPDK_BS_PAGE_SIZE),
|
||||
_spdk_bs_load_replay_md_cpl, ctx);
|
||||
}
|
||||
|
||||
static void
|
||||
_spdk_bs_load_replay_md(spdk_bs_sequence_t *seq, void *cb_arg)
|
||||
_spdk_bs_load_replay_md(struct spdk_bs_load_ctx *ctx)
|
||||
{
|
||||
struct spdk_bs_load_ctx *ctx = cb_arg;
|
||||
|
||||
ctx->page_index = 0;
|
||||
ctx->cur_page = 0;
|
||||
ctx->page = spdk_zmalloc(SPDK_BS_PAGE_SIZE, SPDK_BS_PAGE_SIZE,
|
||||
NULL, SPDK_ENV_SOCKET_ID_ANY, SPDK_MALLOC_DMA);
|
||||
if (!ctx->page) {
|
||||
_spdk_bs_load_ctx_fail(seq, ctx, -ENOMEM);
|
||||
_spdk_bs_load_ctx_fail(ctx->seq, ctx, -ENOMEM);
|
||||
return;
|
||||
}
|
||||
_spdk_bs_load_replay_cur_md_page(seq, ctx);
|
||||
_spdk_bs_load_replay_cur_md_page(ctx);
|
||||
}
|
||||
|
||||
static void
|
||||
_spdk_bs_recover(spdk_bs_sequence_t *seq, void *cb_arg)
|
||||
_spdk_bs_recover(struct spdk_bs_load_ctx *ctx)
|
||||
{
|
||||
struct spdk_bs_load_ctx *ctx = cb_arg;
|
||||
int rc;
|
||||
|
||||
rc = spdk_bit_array_resize(&ctx->bs->used_md_pages, ctx->super->md_len);
|
||||
if (rc < 0) {
|
||||
_spdk_bs_load_ctx_fail(seq, ctx, -ENOMEM);
|
||||
_spdk_bs_load_ctx_fail(ctx->seq, ctx, -ENOMEM);
|
||||
return;
|
||||
}
|
||||
|
||||
rc = spdk_bit_array_resize(&ctx->bs->used_blobids, ctx->super->md_len);
|
||||
if (rc < 0) {
|
||||
_spdk_bs_load_ctx_fail(seq, ctx, -ENOMEM);
|
||||
_spdk_bs_load_ctx_fail(ctx->seq, ctx, -ENOMEM);
|
||||
return;
|
||||
}
|
||||
|
||||
rc = spdk_bit_array_resize(&ctx->bs->used_clusters, ctx->bs->total_clusters);
|
||||
if (rc < 0) {
|
||||
_spdk_bs_load_ctx_fail(seq, ctx, -ENOMEM);
|
||||
_spdk_bs_load_ctx_fail(ctx->seq, ctx, -ENOMEM);
|
||||
return;
|
||||
}
|
||||
|
||||
ctx->bs->num_free_clusters = ctx->bs->total_clusters;
|
||||
_spdk_bs_load_replay_md(seq, ctx);
|
||||
_spdk_bs_load_replay_md(ctx);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -3338,9 +3332,9 @@ _spdk_bs_load_super_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno)
|
||||
memcpy(&ctx->bs->bstype, &ctx->super->bstype, sizeof(ctx->super->bstype));
|
||||
|
||||
if (ctx->super->used_blobid_mask_len == 0 || ctx->super->clean == 0) {
|
||||
_spdk_bs_recover(seq, ctx);
|
||||
_spdk_bs_recover(ctx);
|
||||
} else {
|
||||
_spdk_bs_load_read_used_pages(seq, ctx);
|
||||
_spdk_bs_load_read_used_pages(ctx);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3350,7 +3344,6 @@ spdk_bs_load(struct spdk_bs_dev *dev, struct spdk_bs_opts *o,
|
||||
{
|
||||
struct spdk_blob_store *bs;
|
||||
struct spdk_bs_cpl cpl;
|
||||
spdk_bs_sequence_t *seq;
|
||||
struct spdk_bs_load_ctx *ctx;
|
||||
struct spdk_bs_opts opts = {};
|
||||
int err;
|
||||
@ -3409,8 +3402,8 @@ spdk_bs_load(struct spdk_bs_dev *dev, struct spdk_bs_opts *o,
|
||||
cpl.u.bs_handle.cb_arg = cb_arg;
|
||||
cpl.u.bs_handle.bs = bs;
|
||||
|
||||
seq = spdk_bs_sequence_start(bs->md_channel, &cpl);
|
||||
if (!seq) {
|
||||
ctx->seq = spdk_bs_sequence_start(bs->md_channel, &cpl);
|
||||
if (!ctx->seq) {
|
||||
spdk_free(ctx->super);
|
||||
free(ctx);
|
||||
_spdk_bs_free(bs);
|
||||
@ -3419,7 +3412,7 @@ spdk_bs_load(struct spdk_bs_dev *dev, struct spdk_bs_opts *o,
|
||||
}
|
||||
|
||||
/* Read the super block */
|
||||
spdk_bs_sequence_read_dev(seq, ctx->super, _spdk_bs_page_to_lba(bs, 0),
|
||||
spdk_bs_sequence_read_dev(ctx->seq, ctx->super, _spdk_bs_page_to_lba(bs, 0),
|
||||
_spdk_bs_byte_to_lba(bs, sizeof(*ctx->super)),
|
||||
_spdk_bs_load_super_cpl, ctx);
|
||||
}
|
||||
@ -4051,7 +4044,6 @@ void
|
||||
spdk_bs_unload(struct spdk_blob_store *bs, spdk_bs_op_complete cb_fn, void *cb_arg)
|
||||
{
|
||||
struct spdk_bs_cpl cpl;
|
||||
spdk_bs_sequence_t *seq;
|
||||
struct spdk_bs_load_ctx *ctx;
|
||||
|
||||
SPDK_DEBUGLOG(SPDK_LOG_BLOB, "Syncing blobstore\n");
|
||||
@ -4082,8 +4074,8 @@ spdk_bs_unload(struct spdk_blob_store *bs, spdk_bs_op_complete cb_fn, void *cb_a
|
||||
cpl.u.bs_basic.cb_fn = cb_fn;
|
||||
cpl.u.bs_basic.cb_arg = cb_arg;
|
||||
|
||||
seq = spdk_bs_sequence_start(bs->md_channel, &cpl);
|
||||
if (!seq) {
|
||||
ctx->seq = spdk_bs_sequence_start(bs->md_channel, &cpl);
|
||||
if (!ctx->seq) {
|
||||
spdk_free(ctx->super);
|
||||
free(ctx);
|
||||
cb_fn(cb_arg, -ENOMEM);
|
||||
@ -4091,7 +4083,7 @@ spdk_bs_unload(struct spdk_blob_store *bs, spdk_bs_op_complete cb_fn, void *cb_a
|
||||
}
|
||||
|
||||
/* Read super block */
|
||||
spdk_bs_sequence_read_dev(seq, ctx->super, _spdk_bs_page_to_lba(bs, 0),
|
||||
spdk_bs_sequence_read_dev(ctx->seq, ctx->super, _spdk_bs_page_to_lba(bs, 0),
|
||||
_spdk_bs_byte_to_lba(bs, sizeof(*ctx->super)),
|
||||
_spdk_bs_unload_read_super_cpl, ctx);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user