Commit 2eda3fa0 authored by Tomasz Zawadzki's avatar Tomasz Zawadzki
Browse files

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: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Change-Id: I59a28a402e0c61e5636da623bc109e15b36f0584
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4626


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
parent 98fde363
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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)
+5 −117
Original line number Diff line number Diff line
@@ -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");

	if (sp == NULL) {
		goto end;
	}
				sizeof(struct null_io_channel), "null_bdev");

	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)