From 7b2a6b05d01fcfbbddc276fd76c5ec5fdc8b6275 Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Wed, 31 May 2017 17:01:00 -0700 Subject: [PATCH] nvmf: add public API to get subsystem serial number Change-Id: I61b6579e8698d16e5a8ab74d304af9ea53f9dce4 Signed-off-by: Daniel Verkamp Reviewed-on: https://review.gerrithub.io/363307 Tested-by: SPDK Automated Test System Reviewed-by: Ben Walker --- app/nvmf_tgt/nvmf_rpc.c | 2 +- include/spdk/nvmf.h | 2 ++ lib/nvmf/subsystem.c | 10 ++++++++++ lib/nvmf/virtual.c | 3 ++- test/lib/nvmf/virtual/virtual_ut.c | 7 +++++++ 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/app/nvmf_tgt/nvmf_rpc.c b/app/nvmf_tgt/nvmf_rpc.c index f74694955..a93af6f92 100644 --- a/app/nvmf_tgt/nvmf_rpc.c +++ b/app/nvmf_tgt/nvmf_rpc.c @@ -111,7 +111,7 @@ dump_nvmf_subsystem(struct spdk_json_write_ctx *w, struct nvmf_tgt_subsystem *tg } else { int i; spdk_json_write_name(w, "serial_number"); - spdk_json_write_string(w, subsystem->dev.virt.sn); + spdk_json_write_string(w, spdk_nvmf_subsystem_get_sn(subsystem)); spdk_json_write_name(w, "namespaces"); spdk_json_write_array_begin(w); for (i = 0; i < subsystem->dev.virt.ns_count; i++) { diff --git a/include/spdk/nvmf.h b/include/spdk/nvmf.h index e335556ab..f8bc8ab6b 100644 --- a/include/spdk/nvmf.h +++ b/include/spdk/nvmf.h @@ -171,6 +171,8 @@ void spdk_nvmf_subsystem_poll(struct spdk_nvmf_subsystem *subsystem); int spdk_nvmf_subsystem_add_ns(struct spdk_nvmf_subsystem *subsystem, struct spdk_bdev *bdev); +const char *spdk_nvmf_subsystem_get_sn(const struct spdk_nvmf_subsystem *subsystem); + int spdk_nvmf_subsystem_set_sn(struct spdk_nvmf_subsystem *subsystem, const char *sn); const char *spdk_nvmf_subsystem_get_nqn(struct spdk_nvmf_subsystem *subsystem); diff --git a/lib/nvmf/subsystem.c b/lib/nvmf/subsystem.c index 8b012b949..a0918f1d5 100644 --- a/lib/nvmf/subsystem.c +++ b/lib/nvmf/subsystem.c @@ -409,6 +409,16 @@ spdk_nvmf_subsystem_add_ns(struct spdk_nvmf_subsystem *subsystem, struct spdk_bd return 0; } +const char * +spdk_nvmf_subsystem_get_sn(const struct spdk_nvmf_subsystem *subsystem) +{ + if (subsystem->mode != NVMF_SUBSYSTEM_MODE_VIRTUAL) { + return NULL; + } + + return subsystem->dev.virt.sn; +} + int spdk_nvmf_subsystem_set_sn(struct spdk_nvmf_subsystem *subsystem, const char *sn) { diff --git a/lib/nvmf/virtual.c b/lib/nvmf/virtual.c index 8116c7efb..b392aed0b 100644 --- a/lib/nvmf/virtual.c +++ b/lib/nvmf/virtual.c @@ -89,7 +89,8 @@ nvmf_virtual_ctrlr_get_data(struct spdk_nvmf_session *session) memset(&session->vcdata, 0, sizeof(struct spdk_nvme_ctrlr_data)); spdk_strcpy_pad(session->vcdata.fr, FW_VERSION, sizeof(session->vcdata.fr), ' '); spdk_strcpy_pad(session->vcdata.mn, MODEL_NUMBER, sizeof(session->vcdata.mn), ' '); - spdk_strcpy_pad(session->vcdata.sn, subsys->dev.virt.sn, sizeof(session->vcdata.sn), ' '); + spdk_strcpy_pad(session->vcdata.sn, spdk_nvmf_subsystem_get_sn(subsys), + sizeof(session->vcdata.sn), ' '); session->vcdata.rab = 6; session->vcdata.ver.bits.mjr = 1; session->vcdata.ver.bits.mnr = 2; diff --git a/test/lib/nvmf/virtual/virtual_ut.c b/test/lib/nvmf/virtual/virtual_ut.c index 4ef156876..354945374 100644 --- a/test/lib/nvmf/virtual/virtual_ut.c +++ b/test/lib/nvmf/virtual/virtual_ut.c @@ -174,6 +174,13 @@ const char *spdk_nvmf_subsystem_get_nqn(struct spdk_nvmf_subsystem *subsystem) return NULL; } +const char * +spdk_nvmf_subsystem_get_sn(const struct spdk_nvmf_subsystem *subsystem) +{ + abort(); + return NULL; +} + void spdk_bdev_io_get_nvme_status(const struct spdk_bdev_io *bdev_io, int *sct, int *sc) { }