module/null: remove legacy config support

This patch removes legacy config support in null bdev module.
All options through the legacy config are already reflected in JSON.

While here, added allocation failure check for g_null_read_buf.

Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Change-Id: I59a28a402e0c61e5636da623bc109e15b36f0584
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4626
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
Tomasz Zawadzki 2020-10-12 07:00:57 -04:00
parent 98fde363f3
commit 2eda3fa095
2 changed files with 6 additions and 118 deletions

View File

@ -135,6 +135,7 @@ DEPDIRS-bdev_split := $(BDEV_DEPS_CONF)
DEPDIRS-bdev_aio := $(BDEV_DEPS_THREAD)
DEPDIRS-bdev_compress := $(BDEV_DEPS_THREAD) reduce
DEPDIRS-bdev_delay := $(BDEV_DEPS_THREAD)
DEPDIRS-bdev_null := $(BDEV_DEPS_THREAD)
DEPDIRS-bdev_zone_block := $(BDEV_DEPS_THREAD)
ifeq ($(OS),Linux)
DEPDIRS-bdev_ftl := $(BDEV_DEPS_THREAD) ftl
@ -142,7 +143,6 @@ endif
DEPDIRS-bdev_crypto := $(BDEV_DEPS_CONF_THREAD)
DEPDIRS-bdev_iscsi := $(BDEV_DEPS_CONF_THREAD)
DEPDIRS-bdev_null := $(BDEV_DEPS_CONF_THREAD)
DEPDIRS-bdev_nvme = $(BDEV_DEPS_CONF_THREAD) nvme
DEPDIRS-bdev_ocf := $(BDEV_DEPS_CONF_THREAD)
DEPDIRS-bdev_passthru := $(BDEV_DEPS_CONF_THREAD)

View File

@ -34,7 +34,6 @@
#include "spdk/stdinc.h"
#include "spdk/bdev.h"
#include "spdk/conf.h"
#include "spdk/env.h"
#include "spdk/thread.h"
#include "spdk/json.h"
@ -61,13 +60,11 @@ static void *g_null_read_buf;
static int bdev_null_initialize(void);
static void bdev_null_finish(void);
static void bdev_null_get_spdk_running_config(FILE *fp);
static struct spdk_bdev_module null_if = {
.name = "null",
.module_init = bdev_null_initialize,
.module_fini = bdev_null_finish,
.config_text = bdev_null_get_spdk_running_config,
.async_fini = true,
};
@ -399,23 +396,9 @@ null_bdev_destroy_cb(void *io_device, void *ctx_buf)
spdk_poller_unregister(&ch->poller);
}
static void
_bdev_null_cleanup_cb(void *arg)
{
spdk_free(g_null_read_buf);
}
static int
bdev_null_initialize(void)
{
struct spdk_conf_section *sp = spdk_conf_find_section(NULL, "Null");
uint64_t size_in_mb, num_blocks;
int block_size, i, rc = 0;
int md_size, dif_type;
struct spdk_bdev *bdev;
const char *name, *val;
struct spdk_null_bdev_opts opts = {};
/*
* This will be used if upper layer expects us to allocate the read buffer.
* Instead of using a real rbuf from the bdev pool, just always point to
@ -423,96 +406,18 @@ bdev_null_initialize(void)
*/
g_null_read_buf = spdk_zmalloc(SPDK_BDEV_LARGE_BUF_MAX_SIZE, 0, NULL,
SPDK_ENV_SOCKET_ID_ANY, SPDK_MALLOC_DMA);
if (g_null_read_buf == NULL) {
return -1;
}
/*
* We need to pick some unique address as our "io device" - so just use the
* address of the global tailq.
*/
spdk_io_device_register(&g_null_bdev_head, null_bdev_create_cb, null_bdev_destroy_cb,
sizeof(struct null_io_channel),
"null_bdev");
sizeof(struct null_io_channel), "null_bdev");
if (sp == NULL) {
goto end;
}
for (i = 0; ; ++i) {
val = spdk_conf_section_get_nval(sp, "Dev", i);
if (val == NULL) {
break;
}
name = spdk_conf_section_get_nmval(sp, "Dev", i, 0);
if (name == NULL) {
SPDK_ERRLOG("Null entry %d: Name must be provided\n", i);
continue;
}
val = spdk_conf_section_get_nmval(sp, "Dev", i, 1);
if (val == NULL) {
SPDK_ERRLOG("Null entry %d: Size in MB must be provided\n", i);
continue;
}
errno = 0;
size_in_mb = strtoull(val, NULL, 10);
if (errno) {
SPDK_ERRLOG("Null entry %d: Invalid size in MB %s\n", i, val);
continue;
}
val = spdk_conf_section_get_nmval(sp, "Dev", i, 2);
if (val == NULL) {
block_size = 512;
} else {
block_size = (int)spdk_strtol(val, 10);
if (block_size <= 0) {
SPDK_ERRLOG("Null entry %d: Invalid block size %s\n", i, val);
continue;
}
}
val = spdk_conf_section_get_nmval(sp, "Dev", i, 3);
if (val == NULL) {
md_size = 0;
} else {
md_size = (int)spdk_strtol(val, 10);
if (md_size < 0) {
SPDK_ERRLOG("Null entry %d: Invalid metadata size %s\n", i, val);
continue;
}
}
val = spdk_conf_section_get_nmval(sp, "Dev", i, 4);
if (val == NULL) {
dif_type = SPDK_DIF_DISABLE;
} else {
dif_type = (int)spdk_strtol(val, 10);
if (dif_type < SPDK_DIF_DISABLE || dif_type > SPDK_DIF_TYPE3) {
SPDK_ERRLOG("Null entry %d: Invalid data protection type %s\n", i, val);
continue;
}
}
num_blocks = size_in_mb * (1024 * 1024) / block_size;
opts.name = name;
opts.num_blocks = num_blocks;
opts.block_size = block_size;
opts.md_size = md_size;
opts.md_interleave = true;
opts.dif_type = dif_type;
opts.dif_is_head_of_md = false;
rc = bdev_null_create(&bdev, &opts);
if (rc) {
SPDK_ERRLOG("Could not create null bdev\n");
goto end;
}
}
end:
if (rc) {
spdk_io_device_unregister(&g_null_bdev_head, _bdev_null_cleanup_cb);
}
return rc;
return 0;
}
static void
@ -528,21 +433,4 @@ bdev_null_finish(void)
spdk_io_device_unregister(&g_null_bdev_head, _bdev_null_finish_cb);
}
static void
bdev_null_get_spdk_running_config(FILE *fp)
{
struct null_bdev *bdev;
uint64_t null_bdev_size;
fprintf(fp, "\n[Null]\n");
TAILQ_FOREACH(bdev, &g_null_bdev_head, tailq) {
null_bdev_size = bdev->bdev.blocklen * bdev->bdev.blockcnt;
null_bdev_size /= (1024 * 1024);
fprintf(fp, " Dev %s %" PRIu64 " %d %d %d\n",
bdev->bdev.name, null_bdev_size, bdev->bdev.blocklen, bdev->bdev.md_len,
bdev->bdev.dif_type);
}
}
SPDK_LOG_REGISTER_COMPONENT(bdev_null)