Commit 91de1969 authored by Mateusz Kozlowski's avatar Mateusz Kozlowski Committed by Konrad Sztyber
Browse files

lib/ftl: Extend NV cache device interface



Adding two new functions to the NV cache device interface:
- on_chunk_opened
- on_chunk_closed
The NV cache device can implement these functions to be notified
about that fact that a chunk has been opened or closed.

Change-Id: I2eeb30b864c7b927055ee04280ec8fc2f16caeb3
Signed-off-by: default avatarMariusz Barczak <Mariusz.Barczak@solidigmtechnology.com>
Signed-off-by: default avatarMateusz Kozlowski <mateusz.kozlowski@solidigm.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/19621


Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
parent 3410dee4
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -1933,6 +1933,10 @@ ftl_chunk_open(struct ftl_nv_cache_chunk *chunk)
	assert(chunk->md->write_pointer == 0);
	assert(chunk->md->blocks_written == 0);

	if (dev->nv_cache.nvc_type->ops.on_chunk_open) {
		dev->nv_cache.nvc_type->ops.on_chunk_open(dev, chunk);
	}

	memcpy(p2l_map->chunk_dma_md, chunk->md, region->entry_size * FTL_BLOCK_SIZE);
	p2l_map->chunk_dma_md->state = FTL_CHUNK_STATE_OPEN;
	p2l_map->chunk_dma_md->p2l_map_checksum = 0;
@@ -1946,6 +1950,8 @@ static void
chunk_close_cb(int status, void *ctx)
{
	struct ftl_nv_cache_chunk *chunk = (struct ftl_nv_cache_chunk *)ctx;
	struct ftl_nv_cache *nv_cache = chunk->nv_cache;
	struct spdk_ftl_dev *dev = SPDK_CONTAINEROF(nv_cache, struct spdk_ftl_dev, nv_cache);

	assert(chunk->md->write_pointer == chunk->nv_cache->chunk_blocks);

@@ -1963,6 +1969,9 @@ chunk_close_cb(int status, void *ctx)
		chunk->nv_cache->last_seq_id = chunk->md->close_seq_id;

		chunk->md->state = FTL_CHUNK_STATE_CLOSED;
		if (nv_cache->nvc_type->ops.on_chunk_closed) {
			nv_cache->nvc_type->ops.on_chunk_closed(dev, chunk);
		}
	} else {
#ifdef SPDK_FTL_RETRY_ON_ERROR
		ftl_md_persist_entry_retry(&chunk->md_persist_entry_ctx);
+16 −0
Original line number Diff line number Diff line
@@ -43,6 +43,22 @@ struct ftl_nv_cache_device_ops {
	 */
	void (*deinit)(struct spdk_ftl_dev *dev);

	/**
	 * @brief Inform NV cache device that chunk is being opened
	 *
	 * @param dev ftl device
	 * @param chunk chunk is being opened
	 */
	void (*on_chunk_open)(struct spdk_ftl_dev *dev, struct ftl_nv_cache_chunk *chunk);

	/**
	 * @brief Inform NV cache device that chunk has been closed
	 *
	 * @param dev ftl device
	 * @param chunk chunk which has been closed
	 */
	void (*on_chunk_closed)(struct spdk_ftl_dev *dev, struct ftl_nv_cache_chunk *chunk);

	/**
	 * @brief Check if block device is valid for NV Cache device
	 *