lib/ftl: Update L2P management initialization flow
It fixes segmentation fault in cleanup path of L2P after failure in L2P initialization. Signed-off-by: Kozlowski Mateusz <mateusz.kozlowski@intel.com> Signed-off-by: Mariusz Barczak <mariusz.barczak@intel.com> Change-Id: I1cffa2b39550421939731509c5a51c1565f0fa91 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16216 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
This commit is contained in:
parent
9bd8b264ec
commit
dd94984927
@ -123,6 +123,12 @@ ftl_l2p_is_halted(struct spdk_ftl_dev *dev)
|
||||
return FTL_L2P_OP(is_halted)(dev);
|
||||
}
|
||||
|
||||
void
|
||||
ftl_l2p_resume(struct spdk_ftl_dev *dev)
|
||||
{
|
||||
return FTL_L2P_OP(resume)(dev);
|
||||
}
|
||||
|
||||
void
|
||||
ftl_l2p_halt(struct spdk_ftl_dev *dev)
|
||||
{
|
||||
|
@ -47,6 +47,7 @@ void ftl_l2p_persist(struct spdk_ftl_dev *dev, ftl_l2p_cb cb, void *cb_ctx);
|
||||
void ftl_l2p_process(struct spdk_ftl_dev *dev);
|
||||
bool ftl_l2p_is_halted(struct spdk_ftl_dev *dev);
|
||||
void ftl_l2p_halt(struct spdk_ftl_dev *dev);
|
||||
void ftl_l2p_resume(struct spdk_ftl_dev *dev);
|
||||
|
||||
void ftl_l2p_update_cache(struct spdk_ftl_dev *dev, uint64_t lba, ftl_addr new_addr,
|
||||
ftl_addr old_addr);
|
||||
|
@ -504,7 +504,6 @@ ftl_l2p_cache_init(struct spdk_ftl_dev *dev)
|
||||
cache->cache_layout_bdev_desc = reg->bdev_desc;
|
||||
cache->cache_layout_ioch = reg->ioch;
|
||||
|
||||
cache->state = L2P_CACHE_RUNNING;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -959,6 +958,15 @@ ftl_l2p_cache_halt(struct spdk_ftl_dev *dev)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ftl_l2p_cache_resume(struct spdk_ftl_dev *dev)
|
||||
{
|
||||
struct ftl_l2p_cache *cache = (struct ftl_l2p_cache *)dev->l2p;
|
||||
|
||||
assert(cache->state == L2P_CACHE_INIT);
|
||||
cache->state = L2P_CACHE_RUNNING;
|
||||
}
|
||||
|
||||
static inline struct ftl_l2p_page *
|
||||
get_page(struct ftl_l2p_cache *cache, uint64_t lba)
|
||||
{
|
||||
|
@ -23,5 +23,6 @@ void ftl_l2p_cache_persist(struct spdk_ftl_dev *dev, ftl_l2p_cb cb, void *cb_ctx
|
||||
void ftl_l2p_cache_process(struct spdk_ftl_dev *dev);
|
||||
bool ftl_l2p_cache_is_halted(struct spdk_ftl_dev *dev);
|
||||
void ftl_l2p_cache_halt(struct spdk_ftl_dev *dev);
|
||||
void ftl_l2p_cache_resume(struct spdk_ftl_dev *dev);
|
||||
|
||||
#endif /* FTL_L2P_CACHE_H */
|
||||
|
@ -190,3 +190,8 @@ void
|
||||
ftl_l2p_flat_halt(struct spdk_ftl_dev *dev)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
ftl_l2p_flat_resume(struct spdk_ftl_dev *dev)
|
||||
{
|
||||
}
|
||||
|
@ -19,5 +19,6 @@ void ftl_l2p_flat_persist(struct spdk_ftl_dev *dev, ftl_l2p_cb cb, void *cb_ctx)
|
||||
void ftl_l2p_flat_process(struct spdk_ftl_dev *dev);
|
||||
bool ftl_l2p_flat_is_halted(struct spdk_ftl_dev *dev);
|
||||
void ftl_l2p_flat_halt(struct spdk_ftl_dev *dev);
|
||||
void ftl_l2p_flat_resume(struct spdk_ftl_dev *dev);
|
||||
|
||||
#endif /* FTL_L2P_FLAT_H */
|
||||
|
@ -189,6 +189,7 @@ ftl_mngt_finalize_startup(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mng
|
||||
dev->initialized = 1;
|
||||
dev->sb_shm->shm_ready = true;
|
||||
|
||||
ftl_l2p_resume(dev);
|
||||
ftl_reloc_resume(dev->reloc);
|
||||
ftl_writer_resume(&dev->writer_user);
|
||||
ftl_writer_resume(&dev->writer_gc);
|
||||
|
@ -161,7 +161,6 @@ static const struct ftl_mngt_process_desc desc_first_start = {
|
||||
{
|
||||
.name = "Clear L2P",
|
||||
.action = ftl_mngt_clear_l2p,
|
||||
.cleanup = ftl_mngt_clear_l2p
|
||||
},
|
||||
{
|
||||
.name = "Scrub NV cache",
|
||||
|
Loading…
Reference in New Issue
Block a user