Commit 3410dee4 authored by Mateusz Kozlowski's avatar Mateusz Kozlowski Committed by Konrad Sztyber
Browse files

lib/ftl: Init P2L IO Log for Non-VSS NV Cache



Change-Id: I2bc6a1b286f07c9c998bc6bd739570d6d30cd248
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/+/19620


Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
parent e3f76044
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -4,7 +4,6 @@
 *   All rights reserved.
 */


#include "spdk/bdev.h"
#include "spdk/bdev_module.h"
#include "spdk/ftl.h"
@@ -335,8 +334,19 @@ ftl_nv_cache_init(struct spdk_ftl_dev *dev)
	ftl_nv_cache_init_update_limits(dev);
	ftl_property_register(dev, "cache_device", NULL, 0, NULL, NULL, ftl_property_dump_cache_dev, NULL,
			      NULL, true);

	nv_cache->throttle.interval_tsc = FTL_NV_CACHE_THROTTLE_INTERVAL_MS *
					  (spdk_get_ticks_hz() / 1000);
	nv_cache->chunk_free_target = spdk_divide_round_up(nv_cache->chunk_count *
				      dev->conf.nv_cache.chunk_free_target,
				      100);

	if (nv_cache->nvc_type->ops.init) {
		return nv_cache->nvc_type->ops.init(dev);
	} else {
		return 0;
	}
}

void
ftl_nv_cache_deinit(struct spdk_ftl_dev *dev)
@@ -344,6 +354,10 @@ ftl_nv_cache_deinit(struct spdk_ftl_dev *dev)
	struct ftl_nv_cache *nv_cache = &dev->nv_cache;
	struct ftl_nv_cache_compactor *compactor;

	if (nv_cache->nvc_type->ops.deinit) {
		nv_cache->nvc_type->ops.deinit(dev);
	}

	while (!TAILQ_EMPTY(&nv_cache->compactor_list)) {
		compactor = TAILQ_FIRST(&nv_cache->compactor_list);
		TAILQ_REMOVE(&nv_cache->compactor_list, compactor, entry);
+21 −0
Original line number Diff line number Diff line
@@ -7,6 +7,25 @@
#include "ftl_layout.h"
#include "ftl_nvc_bdev_common.h"

static int
init(struct spdk_ftl_dev *dev)
{
	int rc;

	rc = ftl_p2l_log_init(dev);
	if (rc) {
		return 0;
	}

	return 0;
}

static void
deinit(struct spdk_ftl_dev *dev)
{
	ftl_p2l_log_deinit(dev);
}

static bool
is_bdev_compatible(struct spdk_ftl_dev *dev, struct spdk_bdev *bdev)
{
@@ -47,6 +66,8 @@ struct ftl_nv_cache_device_type nvc_bdev_non_vss = {
	.features = {
	},
	.ops = {
		.init = init,
		.deinit = deinit,
		.is_bdev_compatible = is_bdev_compatible,
		.is_chunk_active = ftl_nvc_bdev_common_is_chunk_active,
		.setup_layout = setup_layout,
+16 −0
Original line number Diff line number Diff line
@@ -27,6 +27,22 @@ struct ftl_nv_cache_device_features {
 * @brief NV Cache device operations interface
 */
struct ftl_nv_cache_device_ops {
	/**
	 * @brief Initialize NV Cache device
	 *
	 * @param dev ftl device
	 *
	 * @return Initialization result
	 */
	int (*init)(struct spdk_ftl_dev *dev);

	/**
	 * @brief Deinitialize NV Cache device
	 *
	 * @param dev ftl device
	 */
	void (*deinit)(struct spdk_ftl_dev *dev);

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