Commit dd949849 authored by Kozlowski Mateusz's avatar Kozlowski Mateusz Committed by Tomasz Zawadzki
Browse files

lib/ftl: Update L2P management initialization flow



It fixes segmentation fault in cleanup path of L2P
after failure in L2P initialization.

Signed-off-by: default avatarKozlowski Mateusz <mateusz.kozlowski@intel.com>
Signed-off-by: default avatarMariusz Barczak <mariusz.barczak@intel.com>
Change-Id: I1cffa2b39550421939731509c5a51c1565f0fa91
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16216


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
parent 9bd8b264
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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)
{
+1 −0
Original line number Diff line number Diff line
@@ -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);
+9 −1
Original line number Diff line number Diff line
@@ -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)
{
+1 −0
Original line number Diff line number Diff line
@@ -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 */
+5 −0
Original line number Diff line number Diff line
@@ -190,3 +190,8 @@ void
ftl_l2p_flat_halt(struct spdk_ftl_dev *dev)
{
}

void
ftl_l2p_flat_resume(struct spdk_ftl_dev *dev)
{
}
Loading