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;
|
||||
/* Allow partial recovery after dirty shutdown */
|
||||
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 {
|
||||
@ -220,7 +224,7 @@ void spdk_ftl_conf_init_defaults(struct spdk_ftl_conf *conf);
|
||||
* \param dev device
|
||||
* \param attr Attribute structure to fill
|
||||
*/
|
||||
void spdk_ftl_dev_get_attrs(const struct spdk_ftl_dev *dev, struct spdk_ftl_attrs *attr);
|
||||
void spdk_ftl_dev_get_attrs(const struct spdk_ftl_dev *dev, struct spdk_ftl_attrs *attr);
|
||||
|
||||
/**
|
||||
* Submits a read to the specified device.
|
||||
|
@ -403,12 +403,33 @@ bdev_ftl_get_io_channel(void *ctx)
|
||||
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
|
||||
bdev_ftl_write_config_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w)
|
||||
{
|
||||
struct ftl_bdev *ftl_bdev = bdev->ctxt;
|
||||
struct spdk_ftl_attrs attrs;
|
||||
const char *trtype_str, *cache_bdev;
|
||||
char uuid[SPDK_UUID_STRING_LEN];
|
||||
|
||||
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_string(w, "name", ftl_bdev->bdev.name);
|
||||
|
||||
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);
|
||||
spdk_json_write_named_bool(w, "allow_open_bands", attrs.allow_open_bands);
|
||||
|
||||
spdk_uuid_fmt_lower(uuid, sizeof(uuid), &attrs.uuid);
|
||||
spdk_json_write_named_string(w, "uuid", uuid);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
spdk_json_write_named_bool(w, "allow_open_bands", attrs.allow_open_bands);
|
||||
_bdev_ftl_write_config_info(ftl_bdev, 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 = {
|
||||
.destruct = bdev_ftl_destruct,
|
||||
.submit_request = bdev_ftl_submit_request,
|
||||
.io_type_supported = bdev_ftl_io_type_supported,
|
||||
.get_io_channel = bdev_ftl_get_io_channel,
|
||||
.write_config_json = bdev_ftl_write_config_json,
|
||||
.dump_info_json = bdev_ftl_dump_info_json,
|
||||
};
|
||||
|
||||
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->cache_bdev_desc = dev->nv_cache.bdev_desc;
|
||||
attrs->allow_open_bands = dev->conf.allow_open_bands;
|
||||
attrs->num_chunks = dev->geo.num_chk;
|
||||
attrs->chunk_size = dev->geo.clba;
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user