Ftl: Add clean restore management path
Adds ability for FTL to startup after clean shutdown. Signed-off-by: Kozlowski Mateusz <mateusz.kozlowski@intel.com> Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com> Change-Id: I2f1b83bb3eb1487b6665c95e76c48881e8899b16 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13364 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
d4b9f2c68b
commit
86619848ec
@ -9,6 +9,8 @@
|
||||
|
||||
static const struct ftl_mngt_process_desc desc_startup;
|
||||
static const struct ftl_mngt_process_desc desc_first_start;
|
||||
static const struct ftl_mngt_process_desc desc_restore;
|
||||
static const struct ftl_mngt_process_desc desc_clean_start;
|
||||
|
||||
static void
|
||||
ftl_mngt_select_startup_mode(struct spdk_ftl_dev *dev,
|
||||
@ -16,6 +18,17 @@ ftl_mngt_select_startup_mode(struct spdk_ftl_dev *dev,
|
||||
{
|
||||
if (dev->conf.mode & SPDK_FTL_MODE_CREATE) {
|
||||
ftl_mngt_call_process(mngt, &desc_first_start);
|
||||
} else {
|
||||
ftl_mngt_call_process(mngt, &desc_restore);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ftl_mngt_select_restore_mode(struct spdk_ftl_dev *dev,
|
||||
struct ftl_mngt_process *mngt)
|
||||
{
|
||||
if (dev->sb->clean) {
|
||||
ftl_mngt_call_process(mngt, &desc_clean_start);
|
||||
} else {
|
||||
ftl_mngt_fail_step(mngt);
|
||||
}
|
||||
@ -166,6 +179,64 @@ static const struct ftl_mngt_process_desc desc_first_start = {
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
* Step utilized on loading of an FTL instance - decides on dirty/clean shutdown path.
|
||||
*/
|
||||
static const struct ftl_mngt_process_desc desc_restore = {
|
||||
.name = "FTL restore",
|
||||
.steps = {
|
||||
{
|
||||
.name = "Select recovery mode",
|
||||
.action = ftl_mngt_select_restore_mode,
|
||||
},
|
||||
{}
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
* Loading of FTL after clean shutdown.
|
||||
*/
|
||||
static const struct ftl_mngt_process_desc desc_clean_start = {
|
||||
.name = "Clean startup",
|
||||
.steps = {
|
||||
{
|
||||
.name = "Restore metadata",
|
||||
.action = ftl_mngt_restore_md
|
||||
},
|
||||
{
|
||||
.name = "Initialize L2P",
|
||||
.action = ftl_mngt_init_l2p,
|
||||
.cleanup = ftl_mngt_deinit_l2p
|
||||
},
|
||||
{
|
||||
.name = "Restore L2P",
|
||||
.action = ftl_mngt_restore_l2p,
|
||||
},
|
||||
{
|
||||
.name = "Finalize band initialization",
|
||||
.action = ftl_mngt_finalize_init_bands,
|
||||
},
|
||||
{
|
||||
.name = "Start core poller",
|
||||
.action = ftl_mngt_start_core_poller,
|
||||
.cleanup = ftl_mngt_stop_core_poller
|
||||
},
|
||||
{
|
||||
.name = "Self test on startup",
|
||||
.action = ftl_mngt_self_test,
|
||||
},
|
||||
{
|
||||
.name = "Set FTL dirty state",
|
||||
.action = ftl_mngt_set_dirty,
|
||||
},
|
||||
{
|
||||
.name = "Finalize initialization",
|
||||
.action = ftl_mngt_finalize_startup,
|
||||
},
|
||||
{}
|
||||
}
|
||||
};
|
||||
|
||||
int
|
||||
ftl_mngt_call_dev_startup(struct spdk_ftl_dev *dev, ftl_mngt_completion cb, void *cb_cntx)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user