From 153fbcb1f848d11da857739830f3955eb681ab52 Mon Sep 17 00:00:00 2001 From: Konrad Sztyber Date: Fri, 20 Sep 2019 14:57:56 +0200 Subject: [PATCH] bdev/ocssd: JSON configuration This patch adds support for saving JSON configuration of the OCSSD bdev module required to recreate the current state. Change-Id: Iedbdb8b4a2b7dd02a223ce6f073553e71b9c040a Signed-off-by: Konrad Sztyber Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/469090 Reviewed-by: Jim Harris Reviewed-by: Ben Walker Tested-by: SPDK CI Jenkins Community-CI: Broadcom SPDK FC-NVMe CI Community-CI: SPDK CI Jenkins --- module/bdev/nvme/bdev_nvme.c | 10 +-------- module/bdev/nvme/bdev_ocssd.c | 22 +++++++++++++++++++ module/bdev/nvme/bdev_ocssd.h | 1 + .../lib/bdev/bdev_ocssd.c/bdev_ocssd_ut.c | 1 + 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index 7fa75e03c..fb3465802 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -166,13 +166,11 @@ static depopulate_namespace_fn g_depopulate_namespace_fn[] = { typedef void (*config_json_namespace_fn)(struct spdk_json_write_ctx *w, struct nvme_bdev_ns *ns); static void nvme_ctrlr_config_json_standard_namespace(struct spdk_json_write_ctx *w, struct nvme_bdev_ns *ns); -static void nvme_ctrlr_config_json_ocssd_namespace(struct spdk_json_write_ctx *w, - struct nvme_bdev_ns *ns); static config_json_namespace_fn g_config_json_namespace_fn[] = { NULL, nvme_ctrlr_config_json_standard_namespace, - nvme_ctrlr_config_json_ocssd_namespace, + bdev_ocssd_namespace_config_json, }; struct spdk_nvme_qpair * @@ -2279,12 +2277,6 @@ nvme_ctrlr_config_json_standard_namespace(struct spdk_json_write_ctx *w, struct /* nop */ } -static void -nvme_ctrlr_config_json_ocssd_namespace(struct spdk_json_write_ctx *w, struct nvme_bdev_ns *ns) -{ - /* nop */ -} - static void nvme_namespace_config_json(struct spdk_json_write_ctx *w, struct nvme_bdev_ns *ns) { diff --git a/module/bdev/nvme/bdev_ocssd.c b/module/bdev/nvme/bdev_ocssd.c index ed0262ae9..5db2c8920 100644 --- a/module/bdev/nvme/bdev_ocssd.c +++ b/module/bdev/nvme/bdev_ocssd.c @@ -112,6 +112,28 @@ bdev_ocssd_config_json(struct spdk_json_write_ctx *w) return 0; } +void +bdev_ocssd_namespace_config_json(struct spdk_json_write_ctx *w, struct nvme_bdev_ns *ns) +{ + struct nvme_bdev_ctrlr *nvme_bdev_ctrlr; + struct nvme_bdev *nvme_bdev; + + TAILQ_FOREACH(nvme_bdev, &ns->bdevs, tailq) { + nvme_bdev_ctrlr = nvme_bdev->nvme_bdev_ctrlr; + + spdk_json_write_object_begin(w); + spdk_json_write_named_string(w, "method", "bdev_ocssd_create"); + + spdk_json_write_named_object_begin(w, "params"); + spdk_json_write_named_string(w, "ctrlr_name", nvme_bdev_ctrlr->name); + spdk_json_write_named_string(w, "bdev_name", nvme_bdev->disk.name); + spdk_json_write_named_uint32(w, "nsid", nvme_bdev->nvme_ns->id); + spdk_json_write_object_end(w); + + spdk_json_write_object_end(w); + } +} + static int bdev_ocssd_get_ctx_size(void) { diff --git a/module/bdev/nvme/bdev_ocssd.h b/module/bdev/nvme/bdev_ocssd.h index 493701e6a..0c4bfe2a0 100644 --- a/module/bdev/nvme/bdev_ocssd.h +++ b/module/bdev/nvme/bdev_ocssd.h @@ -48,5 +48,6 @@ void bdev_ocssd_populate_namespace(struct nvme_bdev_ctrlr *nvme_bdev_ctrlr, struct nvme_bdev_ns *nvme_ns, struct nvme_async_probe_ctx *ctx); void bdev_ocssd_depopulate_namespace(struct nvme_bdev_ns *ns); +void bdev_ocssd_namespace_config_json(struct spdk_json_write_ctx *w, struct nvme_bdev_ns *ns); #endif /* SPDK_BDEV_OCSSD_H */ diff --git a/test/unit/lib/bdev/bdev_ocssd.c/bdev_ocssd_ut.c b/test/unit/lib/bdev/bdev_ocssd.c/bdev_ocssd_ut.c index 525b781b6..abd41d8db 100644 --- a/test/unit/lib/bdev/bdev_ocssd.c/bdev_ocssd_ut.c +++ b/test/unit/lib/bdev/bdev_ocssd.c/bdev_ocssd_ut.c @@ -42,6 +42,7 @@ #include "bdev/nvme/bdev_ocssd.c" #include "bdev/nvme/common.c" #include "common/lib/test_env.c" +#include "unit/lib/json_mock.c" DEFINE_STUB_V(spdk_bdev_module_list_add, (struct spdk_bdev_module *bdev_module)); DEFINE_STUB(spdk_nvme_ctrlr_is_ocssd_ns, bool, (struct spdk_nvme_ctrlr *ctrlr, uint32_t nsid),