bdev/nvme: save discovery configuration

We want to be able to save the discovery configuration
in a generated JSON-RPC file.

The obvious change needed here is to add a
bdev_nvme_start_discovery RPC to the config file
for each discovery context.

But we also need to make sure we do not emit
bdev_nvme_attach_controller RPCs for controllers
that were attached via the discovery service.  These
controllers will be attached by the discovery service
instead - or maybe not at all if the discovery
log page returns different results.

Do both of these changes here, since they are
somewhat tied to each other.

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: Ic2072150c3efdd0a8d01da09e33a647e4929779b
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11818
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
This commit is contained in:
Jim Harris 2022-03-04 20:38:59 +00:00 committed by Tomasz Zawadzki
parent a2d4ddb3b1
commit d086d56415

View File

@ -5904,12 +5904,45 @@ bdev_nvme_opts_config_json(struct spdk_json_write_ctx *w)
spdk_json_write_object_end(w);
}
static void
bdev_nvme_discovery_config_json(struct spdk_json_write_ctx *w, struct discovery_ctx *ctx)
{
struct spdk_nvme_transport_id trid;
spdk_json_write_object_begin(w);
spdk_json_write_named_string(w, "method", "bdev_nvme_start_discovery");
spdk_json_write_named_object_begin(w, "params");
spdk_json_write_named_string(w, "name", ctx->name);
spdk_json_write_named_string(w, "hostnqn", ctx->hostnqn);
trid = ctx->trid;
memset(trid.subnqn, 0, sizeof(trid.subnqn));
nvme_bdev_dump_trid_json(&trid, w);
spdk_json_write_named_int32(w, "ctrlr_loss_timeout_sec", ctx->bdev_opts.ctrlr_loss_timeout_sec);
spdk_json_write_named_uint32(w, "reconnect_delay_sec", ctx->bdev_opts.reconnect_delay_sec);
spdk_json_write_named_uint32(w, "fast_io_fail_timeout_sec",
ctx->bdev_opts.fast_io_fail_timeout_sec);
spdk_json_write_object_end(w);
spdk_json_write_object_end(w);
}
static void
nvme_ctrlr_config_json(struct spdk_json_write_ctx *w,
struct nvme_ctrlr *nvme_ctrlr)
{
struct spdk_nvme_transport_id *trid;
if (nvme_ctrlr->opts.from_discovery_service) {
/* Do not emit an RPC for this - it will be implicitly
* covered by a separate bdev_nvme_start_discovery RPC.
*/
return;
}
trid = &nvme_ctrlr->active_path_id->trid;
spdk_json_write_object_begin(w);
@ -5952,6 +5985,7 @@ bdev_nvme_config_json(struct spdk_json_write_ctx *w)
{
struct nvme_bdev_ctrlr *nbdev_ctrlr;
struct nvme_ctrlr *nvme_ctrlr;
struct discovery_ctx *ctx;
bdev_nvme_opts_config_json(w);
@ -5963,6 +5997,10 @@ bdev_nvme_config_json(struct spdk_json_write_ctx *w)
}
}
TAILQ_FOREACH(ctx, &g_discovery_ctxs, tailq) {
bdev_nvme_discovery_config_json(w, ctx);
}
/* Dump as last parameter to give all NVMe bdevs chance to be constructed
* before enabling hotplug poller.
*/