Commit 63454e89 authored by Konrad Sztyber's avatar Konrad Sztyber Committed by Tomasz Zawadzki
Browse files

nvmf: track spdk_nvmf_target_opts's size



We'll be adding more fields to this structure in the future, so let's
track its size for ensuring ABI compatibility.

Signed-off-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Change-Id: Id3cb8185968a3cd2950d5e0a4ca7b5f4247a7f0d
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/22907


Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarBen Walker <ben@nvidia.com>
parent dc9f61a3
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@
#include "spdk/rpc.h"
#include "spdk/nvmf.h"
#include "spdk/likely.h"
#include "spdk/util.h"

#include "spdk_internal/event.h"

@@ -418,6 +419,7 @@ nvmf_create_nvmf_tgt(void)
	struct spdk_nvmf_subsystem *subsystem;
	struct spdk_nvmf_target_opts tgt_opts = {};

	tgt_opts.size = SPDK_SIZEOF(&tgt_opts, discovery_filter);
	tgt_opts.max_subsystems = g_nvmf_tgt.max_subsystems;
	snprintf(tgt_opts.name, sizeof(tgt_opts.name), "%s", "nvmf_example");
	/* Construct the default NVMe-oF target
+1 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ enum spdk_nvmf_tgt_discovery_filter {
};

struct spdk_nvmf_target_opts {
	size_t		size;
	char		name[NVMF_TGT_NAME_MAX_LENGTH];
	uint32_t	max_subsystems;
	uint16_t	crdt[3];
+15 −22
Original line number Diff line number Diff line
@@ -354,17 +354,22 @@ nvmf_tgt_destroy_poll_group_qpairs(struct spdk_nvmf_poll_group *group)
}

struct spdk_nvmf_tgt *
spdk_nvmf_tgt_create(struct spdk_nvmf_target_opts *opts)
spdk_nvmf_tgt_create(struct spdk_nvmf_target_opts *_opts)
{
	struct spdk_nvmf_tgt *tgt, *tmp_tgt;
	struct spdk_nvmf_target_opts opts = {
		.max_subsystems = SPDK_NVMF_DEFAULT_MAX_SUBSYSTEMS,
		.discovery_filter = SPDK_NVMF_TGT_DISCOVERY_MATCH_ANY,
	};

	if (strnlen(opts->name, NVMF_TGT_NAME_MAX_LENGTH) == NVMF_TGT_NAME_MAX_LENGTH) {
	memcpy(&opts, _opts, _opts->size);
	if (strnlen(opts.name, NVMF_TGT_NAME_MAX_LENGTH) == NVMF_TGT_NAME_MAX_LENGTH) {
		SPDK_ERRLOG("Provided target name exceeds the max length of %u.\n", NVMF_TGT_NAME_MAX_LENGTH);
		return NULL;
	}

	TAILQ_FOREACH(tmp_tgt, &g_nvmf_tgts, link) {
		if (!strncmp(opts->name, tmp_tgt->name, NVMF_TGT_NAME_MAX_LENGTH)) {
		if (!strncmp(opts.name, tmp_tgt->name, NVMF_TGT_NAME_MAX_LENGTH)) {
			SPDK_ERRLOG("Provided target name must be unique.\n");
			return NULL;
		}
@@ -375,30 +380,18 @@ spdk_nvmf_tgt_create(struct spdk_nvmf_target_opts *opts)
		return NULL;
	}

	snprintf(tgt->name, NVMF_TGT_NAME_MAX_LENGTH, "%s", opts->name);
	snprintf(tgt->name, NVMF_TGT_NAME_MAX_LENGTH, "%s", opts.name);

	if (!opts || !opts->max_subsystems) {
	if (!opts.max_subsystems) {
		tgt->max_subsystems = SPDK_NVMF_DEFAULT_MAX_SUBSYSTEMS;
	} else {
		tgt->max_subsystems = opts->max_subsystems;
	}

	if (!opts) {
		tgt->crdt[0] = 0;
		tgt->crdt[1] = 0;
		tgt->crdt[2] = 0;
	} else {
		tgt->crdt[0] = opts->crdt[0];
		tgt->crdt[1] = opts->crdt[1];
		tgt->crdt[2] = opts->crdt[2];
	}

	if (!opts) {
		tgt->discovery_filter = SPDK_NVMF_TGT_DISCOVERY_MATCH_ANY;
	} else {
		tgt->discovery_filter = opts->discovery_filter;
		tgt->max_subsystems = opts.max_subsystems;
	}

	tgt->crdt[0] = opts.crdt[0];
	tgt->crdt[1] = opts.crdt[1];
	tgt->crdt[2] = opts.crdt[2];
	tgt->discovery_filter = opts.discovery_filter;
	tgt->discovery_genctr = 0;
	TAILQ_INIT(&tgt->transports);
	TAILQ_INIT(&tgt->poll_groups);
+1 −0
Original line number Diff line number Diff line
@@ -2180,6 +2180,7 @@ rpc_nvmf_create_target(struct spdk_jsonrpc_request *request,

	snprintf(opts.name, NVMF_TGT_NAME_MAX_LENGTH, "%s", ctx.name);
	opts.max_subsystems = ctx.max_subsystems;
	opts.size = SPDK_SIZEOF(&opts, discovery_filter);

	if (spdk_nvmf_get_tgt(opts.name) != NULL) {
		spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
+1 −0
Original line number Diff line number Diff line
@@ -330,6 +330,7 @@ static int
nvmf_tgt_create_target(void)
{
	struct spdk_nvmf_target_opts opts = {
		.size = SPDK_SIZEOF(&opts, discovery_filter),
		.name = "nvmf_tgt"
	};

Loading