bdev/ftl: Add driver specific data to get_bdevs rpc
Added basic configuration details (transport type and address, parallel units, cache info) as well as most important OCSSD geometry data to get_bdevs driver_specific section. Signed-off-by: Mateusz Kozlowski <mateusz.kozlowski@intel.com> Change-Id: I00c50706bd9203bcef1701be1b7d87e93c10e57f Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/456790 Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
675c4aa743
commit
8cdb3d330e
@ -143,6 +143,10 @@ struct spdk_ftl_attrs {
|
|||||||
struct spdk_bdev_desc *cache_bdev_desc;
|
struct spdk_bdev_desc *cache_bdev_desc;
|
||||||
/* Allow partial recovery after dirty shutdown */
|
/* Allow partial recovery after dirty shutdown */
|
||||||
bool allow_open_bands;
|
bool allow_open_bands;
|
||||||
|
/* Number of chunks per parallel unit in the underlying device (including any offline ones) */
|
||||||
|
size_t num_chunks;
|
||||||
|
/* Number of sectors per chunk */
|
||||||
|
size_t chunk_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ftl_module_init_opts {
|
struct ftl_module_init_opts {
|
||||||
|
@ -403,12 +403,33 @@ bdev_ftl_get_io_channel(void *ctx)
|
|||||||
return spdk_get_io_channel(ftl_bdev);
|
return spdk_get_io_channel(ftl_bdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_bdev_ftl_write_config_info(struct ftl_bdev *ftl_bdev, struct spdk_json_write_ctx *w)
|
||||||
|
{
|
||||||
|
struct spdk_ftl_attrs attrs;
|
||||||
|
const char *trtype_str, *cache_bdev;
|
||||||
|
|
||||||
|
spdk_ftl_dev_get_attrs(ftl_bdev->dev, &attrs);
|
||||||
|
|
||||||
|
trtype_str = spdk_nvme_transport_id_trtype_str(ftl_bdev->ctrlr->trid.trtype);
|
||||||
|
if (trtype_str) {
|
||||||
|
spdk_json_write_named_string(w, "trtype", trtype_str);
|
||||||
|
}
|
||||||
|
|
||||||
|
spdk_json_write_named_string(w, "traddr", ftl_bdev->ctrlr->trid.traddr);
|
||||||
|
spdk_json_write_named_string_fmt(w, "punits", "%d-%d", attrs.range.begin, attrs.range.end);
|
||||||
|
|
||||||
|
if (ftl_bdev->cache_bdev_desc) {
|
||||||
|
cache_bdev = spdk_bdev_get_name(spdk_bdev_desc_get_bdev(ftl_bdev->cache_bdev_desc));
|
||||||
|
spdk_json_write_named_string(w, "cache", cache_bdev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
bdev_ftl_write_config_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w)
|
bdev_ftl_write_config_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w)
|
||||||
{
|
{
|
||||||
struct ftl_bdev *ftl_bdev = bdev->ctxt;
|
struct ftl_bdev *ftl_bdev = bdev->ctxt;
|
||||||
struct spdk_ftl_attrs attrs;
|
struct spdk_ftl_attrs attrs;
|
||||||
const char *trtype_str, *cache_bdev;
|
|
||||||
char uuid[SPDK_UUID_STRING_LEN];
|
char uuid[SPDK_UUID_STRING_LEN];
|
||||||
|
|
||||||
spdk_ftl_dev_get_attrs(ftl_bdev->dev, &attrs);
|
spdk_ftl_dev_get_attrs(ftl_bdev->dev, &attrs);
|
||||||
@ -420,34 +441,44 @@ bdev_ftl_write_config_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w
|
|||||||
spdk_json_write_named_object_begin(w, "params");
|
spdk_json_write_named_object_begin(w, "params");
|
||||||
spdk_json_write_named_string(w, "name", ftl_bdev->bdev.name);
|
spdk_json_write_named_string(w, "name", ftl_bdev->bdev.name);
|
||||||
|
|
||||||
trtype_str = spdk_nvme_transport_id_trtype_str(ftl_bdev->ctrlr->trid.trtype);
|
spdk_json_write_named_bool(w, "allow_open_bands", attrs.allow_open_bands);
|
||||||
if (trtype_str) {
|
|
||||||
spdk_json_write_named_string(w, "trtype", trtype_str);
|
|
||||||
}
|
|
||||||
|
|
||||||
spdk_json_write_named_string(w, "traddr", ftl_bdev->ctrlr->trid.traddr);
|
|
||||||
spdk_json_write_named_string_fmt(w, "punits", "%d-%d", attrs.range.begin, attrs.range.end);
|
|
||||||
|
|
||||||
spdk_uuid_fmt_lower(uuid, sizeof(uuid), &attrs.uuid);
|
spdk_uuid_fmt_lower(uuid, sizeof(uuid), &attrs.uuid);
|
||||||
spdk_json_write_named_string(w, "uuid", uuid);
|
spdk_json_write_named_string(w, "uuid", uuid);
|
||||||
|
|
||||||
if (ftl_bdev->cache_bdev_desc) {
|
_bdev_ftl_write_config_info(ftl_bdev, w);
|
||||||
cache_bdev = spdk_bdev_get_name(spdk_bdev_desc_get_bdev(ftl_bdev->cache_bdev_desc));
|
|
||||||
spdk_json_write_named_string(w, "cache", cache_bdev);
|
|
||||||
}
|
|
||||||
|
|
||||||
spdk_json_write_named_bool(w, "allow_open_bands", attrs.allow_open_bands);
|
|
||||||
|
|
||||||
spdk_json_write_object_end(w);
|
spdk_json_write_object_end(w);
|
||||||
spdk_json_write_object_end(w);
|
spdk_json_write_object_end(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
bdev_ftl_dump_info_json(void *ctx, struct spdk_json_write_ctx *w)
|
||||||
|
{
|
||||||
|
struct ftl_bdev *ftl_bdev = ctx;
|
||||||
|
struct spdk_ftl_attrs attrs;
|
||||||
|
|
||||||
|
spdk_ftl_dev_get_attrs(ftl_bdev->dev, &attrs);
|
||||||
|
|
||||||
|
spdk_json_write_named_object_begin(w, "ftl");
|
||||||
|
|
||||||
|
_bdev_ftl_write_config_info(ftl_bdev, w);
|
||||||
|
spdk_json_write_named_string_fmt(w, "num_chunks", "%zu", attrs.num_chunks);
|
||||||
|
spdk_json_write_named_string_fmt(w, "chunk_size", "%zu", attrs.chunk_size);
|
||||||
|
|
||||||
|
/* ftl */
|
||||||
|
spdk_json_write_object_end(w);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static const struct spdk_bdev_fn_table ftl_fn_table = {
|
static const struct spdk_bdev_fn_table ftl_fn_table = {
|
||||||
.destruct = bdev_ftl_destruct,
|
.destruct = bdev_ftl_destruct,
|
||||||
.submit_request = bdev_ftl_submit_request,
|
.submit_request = bdev_ftl_submit_request,
|
||||||
.io_type_supported = bdev_ftl_io_type_supported,
|
.io_type_supported = bdev_ftl_io_type_supported,
|
||||||
.get_io_channel = bdev_ftl_get_io_channel,
|
.get_io_channel = bdev_ftl_get_io_channel,
|
||||||
.write_config_json = bdev_ftl_write_config_json,
|
.write_config_json = bdev_ftl_write_config_json,
|
||||||
|
.dump_info_json = bdev_ftl_dump_info_json,
|
||||||
};
|
};
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -1644,6 +1644,8 @@ spdk_ftl_dev_get_attrs(const struct spdk_ftl_dev *dev, struct spdk_ftl_attrs *at
|
|||||||
attrs->range = dev->range;
|
attrs->range = dev->range;
|
||||||
attrs->cache_bdev_desc = dev->nv_cache.bdev_desc;
|
attrs->cache_bdev_desc = dev->nv_cache.bdev_desc;
|
||||||
attrs->allow_open_bands = dev->conf.allow_open_bands;
|
attrs->allow_open_bands = dev->conf.allow_open_bands;
|
||||||
|
attrs->num_chunks = dev->geo.num_chk;
|
||||||
|
attrs->chunk_size = dev->geo.clba;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user