diff --git a/lib/ftl/ftl_l2p.c b/lib/ftl/ftl_l2p.c index a08519eac..9b778d3fc 100644 --- a/lib/ftl/ftl_l2p.c +++ b/lib/ftl/ftl_l2p.c @@ -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) { diff --git a/lib/ftl/ftl_l2p.h b/lib/ftl/ftl_l2p.h index 55f03f772..23fa0fa17 100644 --- a/lib/ftl/ftl_l2p.h +++ b/lib/ftl/ftl_l2p.h @@ -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); diff --git a/lib/ftl/ftl_l2p_cache.c b/lib/ftl/ftl_l2p_cache.c index 7f3fe380f..310427100 100644 --- a/lib/ftl/ftl_l2p_cache.c +++ b/lib/ftl/ftl_l2p_cache.c @@ -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) { diff --git a/lib/ftl/ftl_l2p_cache.h b/lib/ftl/ftl_l2p_cache.h index acf44b685..c1d189edf 100644 --- a/lib/ftl/ftl_l2p_cache.h +++ b/lib/ftl/ftl_l2p_cache.h @@ -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 */ diff --git a/lib/ftl/ftl_l2p_flat.c b/lib/ftl/ftl_l2p_flat.c index 4f6ca9eef..52b09d38e 100644 --- a/lib/ftl/ftl_l2p_flat.c +++ b/lib/ftl/ftl_l2p_flat.c @@ -190,3 +190,8 @@ void ftl_l2p_flat_halt(struct spdk_ftl_dev *dev) { } + +void +ftl_l2p_flat_resume(struct spdk_ftl_dev *dev) +{ +} diff --git a/lib/ftl/ftl_l2p_flat.h b/lib/ftl/ftl_l2p_flat.h index eb5a900f5..20732c4e8 100644 --- a/lib/ftl/ftl_l2p_flat.h +++ b/lib/ftl/ftl_l2p_flat.h @@ -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 */ diff --git a/lib/ftl/mngt/ftl_mngt_misc.c b/lib/ftl/mngt/ftl_mngt_misc.c index 44edfcfec..a7d47da48 100644 --- a/lib/ftl/mngt/ftl_mngt_misc.c +++ b/lib/ftl/mngt/ftl_mngt_misc.c @@ -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); diff --git a/lib/ftl/mngt/ftl_mngt_startup.c b/lib/ftl/mngt/ftl_mngt_startup.c index ff56e129d..0ffd1e00b 100644 --- a/lib/ftl/mngt/ftl_mngt_startup.c +++ b/lib/ftl/mngt/ftl_mngt_startup.c @@ -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",