From b872e29fef383ce3d7a0fb53022a780e7c026273 Mon Sep 17 00:00:00 2001 From: Kozlowski Mateusz Date: Mon, 20 Jun 2022 12:00:04 +0200 Subject: [PATCH] FTL: Add config checks during startup flow Signed-off-by: Kozlowski Mateusz Signed-off-by: Artur Paszkiewicz Change-Id: I336880ee263dbb23b613bd933c776f0b922412cc Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13294 Community-CI: Mellanox Build Bot Reviewed-by: Jim Harris Reviewed-by: Konrad Sztyber Reviewed-by: Ben Walker Tested-by: SPDK CI Jenkins --- lib/ftl/Makefile | 2 +- lib/ftl/mngt/ftl_mngt_misc.c | 20 ++++++++++++++++++++ lib/ftl/mngt/ftl_mngt_startup.c | 4 ++++ lib/ftl/mngt/ftl_mngt_steps.h | 2 ++ lib/ftl/utils/ftl_conf.c | 13 +++++++++++++ lib/ftl/utils/ftl_conf.h | 2 ++ 6 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 lib/ftl/mngt/ftl_mngt_misc.c diff --git a/lib/ftl/Makefile b/lib/ftl/Makefile index 3f3274c33..168975da4 100644 --- a/lib/ftl/Makefile +++ b/lib/ftl/Makefile @@ -19,7 +19,7 @@ FTL_SUBDIRS := mngt utils C_SRCS = ftl_core.c ftl_init.c ftl_layout.c C_SRCS += mngt/ftl_mngt.c mngt/ftl_mngt_bdev.c mngt/ftl_mngt_shutdown.c mngt/ftl_mngt_startup.c -C_SRCS += mngt/ftl_mngt_md.c +C_SRCS += mngt/ftl_mngt_md.c mngt/ftl_mngt_misc.c C_SRCS += utils/ftl_conf.c utils/ftl_md.c SPDK_MAP_FILE = $(abspath $(CURDIR)/spdk_ftl.map) diff --git a/lib/ftl/mngt/ftl_mngt_misc.c b/lib/ftl/mngt/ftl_mngt_misc.c new file mode 100644 index 000000000..4b80c8db3 --- /dev/null +++ b/lib/ftl/mngt/ftl_mngt_misc.c @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) Intel Corporation. + * All rights reserved. + */ + +#include "ftl_core.h" +#include "ftl_utils.h" +#include "ftl_mngt.h" +#include "ftl_mngt_steps.h" +#include "ftl_internal.h" + +void +ftl_mngt_check_conf(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt) +{ + if (ftl_conf_is_valid(&dev->conf)) { + ftl_mngt_next_step(mngt); + } else { + ftl_mngt_fail_step(mngt); + } +} diff --git a/lib/ftl/mngt/ftl_mngt_startup.c b/lib/ftl/mngt/ftl_mngt_startup.c index 4a281b848..1bf19e699 100644 --- a/lib/ftl/mngt/ftl_mngt_startup.c +++ b/lib/ftl/mngt/ftl_mngt_startup.c @@ -12,6 +12,10 @@ static const struct ftl_mngt_process_desc desc_startup; static const struct ftl_mngt_process_desc desc_startup = { .name = "FTL startup", .steps = { + { + .name = "Check configuration", + .action = ftl_mngt_check_conf, + }, { .name = "Open base bdev", .action = ftl_mngt_open_base_bdev, diff --git a/lib/ftl/mngt/ftl_mngt_steps.h b/lib/ftl/mngt/ftl_mngt_steps.h index 3651807dd..b198eecc0 100644 --- a/lib/ftl/mngt/ftl_mngt_steps.h +++ b/lib/ftl/mngt/ftl_mngt_steps.h @@ -8,6 +8,8 @@ #include "ftl_mngt.h" +void ftl_mngt_check_conf(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt); + void ftl_mngt_open_base_bdev(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt); void ftl_mngt_close_base_bdev(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt); diff --git a/lib/ftl/utils/ftl_conf.c b/lib/ftl/utils/ftl_conf.c index 30c0b851a..7cfd54b31 100644 --- a/lib/ftl/utils/ftl_conf.c +++ b/lib/ftl/utils/ftl_conf.c @@ -101,3 +101,16 @@ ftl_conf_init_dev(struct spdk_ftl_dev *dev, const struct spdk_ftl_conf *conf) return 0; } + +bool +ftl_conf_is_valid(const struct spdk_ftl_conf *conf) +{ + if (conf->overprovisioning >= 100) { + return false; + } + if (conf->overprovisioning == 0) { + return false; + } + + return true; +} diff --git a/lib/ftl/utils/ftl_conf.h b/lib/ftl/utils/ftl_conf.h index b399cc218..733ec1c50 100644 --- a/lib/ftl/utils/ftl_conf.h +++ b/lib/ftl/utils/ftl_conf.h @@ -8,6 +8,8 @@ #include "spdk/ftl.h" +bool ftl_conf_is_valid(const struct spdk_ftl_conf *conf); + int ftl_conf_cpy(struct spdk_ftl_conf *dst, const struct spdk_ftl_conf *src); void ftl_conf_deinit(struct spdk_ftl_conf *conf);