diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index a0ffd5e1b..b1031f455 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -2422,6 +2422,56 @@ bdev_nvme_get_memory_domains(void *ctx, struct spdk_memory_domain **domains, int return spdk_nvme_ctrlr_get_memory_domains(nvme_ns->ctrlr->ctrlr, domains, array_size); } +static const char * +nvme_ctrlr_get_state_str(struct nvme_ctrlr *nvme_ctrlr) +{ + if (nvme_ctrlr->destruct) { + return "deleting"; + } else if (spdk_nvme_ctrlr_is_failed(nvme_ctrlr->ctrlr)) { + return "failed"; + } else if (nvme_ctrlr->resetting) { + return "resetting"; + } else if (nvme_ctrlr->reconnect_is_delayed > 0) { + return "reconnect_is_delayed"; + } else { + return "enabled"; + } +} + +void +nvme_ctrlr_info_json(struct spdk_json_write_ctx *w, struct nvme_ctrlr *nvme_ctrlr) +{ + struct spdk_nvme_transport_id *trid; + const struct spdk_nvme_ctrlr_opts *opts; + + spdk_json_write_object_begin(w); + + spdk_json_write_named_string(w, "state", nvme_ctrlr_get_state_str(nvme_ctrlr)); + +#ifdef SPDK_CONFIG_NVME_CUSE + size_t cuse_name_size = 128; + char cuse_name[cuse_name_size]; + + int rc = spdk_nvme_cuse_get_ctrlr_name(nvme_ctrlr->ctrlr, cuse_name, &cuse_name_size); + if (rc == 0) { + spdk_json_write_named_string(w, "cuse_device", cuse_name); + } +#endif + trid = &nvme_ctrlr->active_path_id->trid; + spdk_json_write_named_object_begin(w, "trid"); + nvme_bdev_dump_trid_json(trid, w); + spdk_json_write_object_end(w); + + opts = spdk_nvme_ctrlr_get_opts(nvme_ctrlr->ctrlr); + spdk_json_write_named_object_begin(w, "host"); + spdk_json_write_named_string(w, "nqn", opts->hostnqn); + spdk_json_write_named_string(w, "addr", opts->src_addr); + spdk_json_write_named_string(w, "svcid", opts->src_svcid); + spdk_json_write_object_end(w); + + spdk_json_write_object_end(w); +} + static void nvme_namespace_info_json(struct spdk_json_write_ctx *w, struct nvme_ns *nvme_ns) diff --git a/module/bdev/nvme/bdev_nvme.h b/module/bdev/nvme/bdev_nvme.h index 5ee33f56f..9036245a2 100644 --- a/module/bdev/nvme/bdev_nvme.h +++ b/module/bdev/nvme/bdev_nvme.h @@ -234,6 +234,8 @@ void nvme_bdev_ctrlr_for_each(nvme_bdev_ctrlr_for_each_fn fn, void *ctx); void nvme_bdev_dump_trid_json(const struct spdk_nvme_transport_id *trid, struct spdk_json_write_ctx *w); +void nvme_ctrlr_info_json(struct spdk_json_write_ctx *w, struct nvme_ctrlr *nvme_ctrlr); + struct nvme_ns *nvme_ctrlr_get_ns(struct nvme_ctrlr *nvme_ctrlr, uint32_t nsid); struct nvme_ns *nvme_ctrlr_get_first_active_ns(struct nvme_ctrlr *nvme_ctrlr); struct nvme_ns *nvme_ctrlr_get_next_active_ns(struct nvme_ctrlr *nvme_ctrlr, struct nvme_ns *ns); diff --git a/module/bdev/nvme/bdev_nvme_rpc.c b/module/bdev/nvme/bdev_nvme_rpc.c index 73a4dc30c..896cc2ed3 100644 --- a/module/bdev/nvme/bdev_nvme_rpc.c +++ b/module/bdev/nvme/bdev_nvme_rpc.c @@ -537,60 +537,18 @@ SPDK_RPC_REGISTER("bdev_nvme_attach_controller", rpc_bdev_nvme_attach_controller SPDK_RPC_RUNTIME) SPDK_RPC_REGISTER_ALIAS_DEPRECATED(bdev_nvme_attach_controller, construct_nvme_bdev) -static const char * -nvme_ctrlr_get_state_str(struct nvme_ctrlr *nvme_ctrlr) -{ - if (nvme_ctrlr->destruct) { - return "deleting"; - } else if (spdk_nvme_ctrlr_is_failed(nvme_ctrlr->ctrlr)) { - return "failed"; - } else if (nvme_ctrlr->resetting) { - return "resetting"; - } else if (nvme_ctrlr->reconnect_is_delayed > 0) { - return "reconnect_is_delayed"; - } else { - return "enabled"; - } -} - static void rpc_dump_nvme_bdev_controller_info(struct nvme_bdev_ctrlr *nbdev_ctrlr, void *ctx) { struct spdk_json_write_ctx *w = ctx; - struct spdk_nvme_transport_id *trid; struct nvme_ctrlr *nvme_ctrlr; - const struct spdk_nvme_ctrlr_opts *opts; spdk_json_write_object_begin(w); spdk_json_write_named_string(w, "name", nbdev_ctrlr->name); spdk_json_write_named_array_begin(w, "ctrlrs"); TAILQ_FOREACH(nvme_ctrlr, &nbdev_ctrlr->ctrlrs, tailq) { - spdk_json_write_object_begin(w); - - spdk_json_write_named_string(w, "state", nvme_ctrlr_get_state_str(nvme_ctrlr)); - -#ifdef SPDK_CONFIG_NVME_CUSE - size_t cuse_name_size = 128; - char cuse_name[cuse_name_size]; - - int rc = spdk_nvme_cuse_get_ctrlr_name(nvme_ctrlr->ctrlr, cuse_name, &cuse_name_size); - if (rc == 0) { - spdk_json_write_named_string(w, "cuse_device", cuse_name); - } -#endif - trid = &nvme_ctrlr->active_path_id->trid; - spdk_json_write_named_object_begin(w, "trid"); - nvme_bdev_dump_trid_json(trid, w); - spdk_json_write_object_end(w); - - opts = spdk_nvme_ctrlr_get_opts(nvme_ctrlr->ctrlr); - spdk_json_write_named_object_begin(w, "host"); - spdk_json_write_named_string(w, "nqn", opts->hostnqn); - spdk_json_write_named_string(w, "addr", opts->src_addr); - spdk_json_write_named_string(w, "svcid", opts->src_svcid); - spdk_json_write_object_end(w); - spdk_json_write_object_end(w); + nvme_ctrlr_info_json(w, nvme_ctrlr); } spdk_json_write_array_end(w); spdk_json_write_object_end(w); diff --git a/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c b/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c index 883ea2956..54c21f351 100644 --- a/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c +++ b/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c @@ -97,6 +97,9 @@ spdk_nvme_ctrlr_get_default_io_qpair_opts(struct spdk_nvme_ctrlr *ctrlr, memset(opts, 0, opts_size); } +DEFINE_STUB(spdk_nvme_ctrlr_get_opts, const struct spdk_nvme_ctrlr_opts *, + (struct spdk_nvme_ctrlr *ctrlr), NULL); + DEFINE_STUB(spdk_nvme_ctrlr_get_max_xfer_size, uint32_t, (const struct spdk_nvme_ctrlr *ctrlr), 0); @@ -122,6 +125,9 @@ DEFINE_STUB(spdk_nvme_ctrlr_cmd_io_raw_with_md, int, (struct spdk_nvme_ctrlr *ct struct spdk_nvme_qpair *qpair, struct spdk_nvme_cmd *cmd, void *buf, uint32_t len, void *md_buf, spdk_nvme_cmd_cb cb_fn, void *cb_arg), 0); +DEFINE_STUB(spdk_nvme_cuse_get_ctrlr_name, int, (struct spdk_nvme_ctrlr *ctrlr, char *name, + size_t *size), 0); + DEFINE_STUB(spdk_nvme_ns_get_max_io_xfer_size, uint32_t, (struct spdk_nvme_ns *ns), 0); DEFINE_STUB(spdk_nvme_ns_get_extended_sector_size, uint32_t, (struct spdk_nvme_ns *ns), 0);