Commit 604c1b6f authored by Krzysztof Karas's avatar Krzysztof Karas Committed by Tomasz Zawadzki
Browse files

nvmf: validate I/O unit size



Validate I/O unit size value in nvmf_create_transport RPC.

Fixes #3167

Change-Id: I1add2fc2452f276343c617595ce26d3162e6d848
Signed-off-by: default avatarKrzysztof Karas <krzysztof.karas@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/20570


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
parent 826d20bd
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -263,6 +263,10 @@ nvmf_transport_create(const char *transport_name, struct spdk_nvmf_transport_opt
	}

	spdk_iobuf_get_opts(&opts_iobuf);
	if (ctx->opts.io_unit_size == 0) {
		SPDK_ERRLOG("io_unit_size cannot be 0\n");
		goto err;
	}
	if (ctx->opts.io_unit_size > opts_iobuf.large_bufsize) {
		SPDK_ERRLOG("io_unit_size %u is larger than iobuf pool large buffer size %d\n",
			    ctx->opts.io_unit_size, opts_iobuf.large_bufsize);
+4 −1
Original line number Diff line number Diff line
@@ -1466,7 +1466,10 @@ test_spdk_nvmf_subsystem_add_host(void)
	int rc;
	const char hostnqn[] = "nqn.2016-06.io.spdk:host1";
	const char subsystemnqn[] = "nqn.2016-06.io.spdk:subsystem1";
	struct spdk_nvmf_transport_opts opts = {.opts_size = 1};
	struct spdk_nvmf_transport_opts opts = {
		.opts_size = sizeof(struct spdk_nvmf_transport_opts),
		.io_unit_size = 8192
	};
	const struct spdk_nvmf_transport_ops test_ops = {
		.name = "transport_ut",
		.create = transport_create,
+17 −1
Original line number Diff line number Diff line
@@ -151,9 +151,25 @@ test_spdk_nvmf_transport_create(void)
	CU_ASSERT(rc != 0);
	CU_ASSERT(transport == NULL);

	/* Create transport successfully */
	spdk_nvmf_transport_register(&ops);

	/* Ensure io_unit_size cannot be set to 0 */
	g_rdma_ut_transport_opts.io_unit_size = 0;
	rc = spdk_nvmf_transport_create_async("new_ops", &g_rdma_ut_transport_opts,
					      test_nvmf_create_transport_done, &transport);
	CU_ASSERT(rc != 0);
	CU_ASSERT(transport == NULL);

	/* Ensure io_unit_size cannot be larger than large_bufsize */
	g_rdma_ut_transport_opts.io_unit_size = opts_iobuf.large_bufsize * 2;
	rc = spdk_nvmf_transport_create_async("new_ops", &g_rdma_ut_transport_opts,
					      test_nvmf_create_transport_done, &transport);
	CU_ASSERT(rc != 0);
	CU_ASSERT(transport == NULL);

	g_rdma_ut_transport_opts.io_unit_size = SPDK_NVMF_RDMA_MIN_IO_BUFFER_SIZE;

	/* Create transport successfully */
	rc = spdk_nvmf_transport_create_async("new_ops", &g_rdma_ut_transport_opts,
					      test_nvmf_create_transport_done, &transport);
	CU_ASSERT(rc == 0);