From bbfcb0943bdf5666787b143fa915cdced3cca0b2 Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Wed, 31 May 2017 16:46:17 -0700 Subject: [PATCH] nvmf_tgt: use public API to set serial number Also move the validation of serial number length into the library. Change-Id: Ibc9384fc1fccb87bd15b75da7f3942570900bd96 Signed-off-by: Daniel Verkamp Reviewed-on: https://review.gerrithub.io/363304 Tested-by: SPDK Automated Test System Reviewed-by: Ben Walker --- app/nvmf_tgt/conf.c | 23 ++++------------------- lib/nvmf/subsystem.c | 10 ++++++++++ 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/app/nvmf_tgt/conf.c b/app/nvmf_tgt/conf.c index 7f5169711..5aaaca61b 100644 --- a/app/nvmf_tgt/conf.c +++ b/app/nvmf_tgt/conf.c @@ -291,20 +291,6 @@ attach_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid, ctx->found = true; } -static int -spdk_nvmf_validate_sn(const char *sn) -{ - size_t len; - - len = strlen(sn); - if (len > MAX_SN_LEN) { - SPDK_ERRLOG("Invalid sn \"%s\": length %zu > max %d\n", sn, len, MAX_SN_LEN); - return -1; - } - - return 0; -} - static int spdk_nvmf_allocate_lcore(uint64_t mask, uint32_t lcore) { @@ -590,16 +576,15 @@ spdk_nvmf_construct_subsystem(const char *name, SPDK_ERRLOG("Subsystem %s: missing serial number\n", name); goto error; } - if (spdk_nvmf_validate_sn(sn) != 0) { - goto error; - } if (num_devs > MAX_VIRTUAL_NAMESPACE) { goto error; } - subsystem->dev.virt.ns_count = 0; - snprintf(subsystem->dev.virt.sn, MAX_SN_LEN, "%s", sn); + if (spdk_nvmf_subsystem_set_sn(subsystem, sn)) { + SPDK_ERRLOG("Subsystem %s: invalid serial number '%s'\n", name, sn); + goto error; + } for (i = 0; i < num_devs; i++) { namespace = dev_list[i]; diff --git a/lib/nvmf/subsystem.c b/lib/nvmf/subsystem.c index 2f25d33dc..8b012b949 100644 --- a/lib/nvmf/subsystem.c +++ b/lib/nvmf/subsystem.c @@ -412,10 +412,20 @@ spdk_nvmf_subsystem_add_ns(struct spdk_nvmf_subsystem *subsystem, struct spdk_bd int spdk_nvmf_subsystem_set_sn(struct spdk_nvmf_subsystem *subsystem, const char *sn) { + size_t len, max_len; + if (subsystem->mode != NVMF_SUBSYSTEM_MODE_VIRTUAL) { return -1; } + max_len = sizeof(subsystem->dev.virt.sn) - 1; + len = strlen(sn); + if (len > max_len) { + SPDK_TRACELOG(SPDK_TRACE_NVMF, "Invalid sn \"%s\": length %zu > max %zu\n", + sn, len, max_len); + return -1; + } + snprintf(subsystem->dev.virt.sn, sizeof(subsystem->dev.virt.sn), "%s", sn); return 0;