ftl: retrieve device’s attributes and configuration

Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
Signed-off-by: Kozlowski Mateusz <mateusz.kozlowski@intel.com>
Change-Id: Ide6bb24d2c1ec2b0da3f20ce4013a4cd6e339114
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13297
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
This commit is contained in:
Artur Paszkiewicz 2022-06-21 13:03:44 +02:00 committed by Konrad Sztyber
parent 92b5ebe014
commit d974bad6fc
5 changed files with 59 additions and 0 deletions

View File

@ -48,6 +48,19 @@ enum spdk_ftl_mode {
SPDK_FTL_MODE_CREATE = (1 << 0),
};
struct spdk_ftl_attrs {
/* Number of logical blocks */
uint64_t num_blocks;
/* Logical block size */
uint64_t block_size;
/* Number of zones in the underlying device (including any offline ones) */
uint64_t num_zones;
/* Number of logical blocks per zone */
uint64_t zone_size;
/* Optimal IO size - bdev layer will split requests over this size */
uint64_t optimum_io_size;
};
typedef void (*spdk_ftl_fn)(void *cb_arg, int status);
typedef void (*spdk_ftl_init_fn)(struct spdk_ftl_dev *dev, void *cb_arg, int status);
@ -74,6 +87,22 @@ int spdk_ftl_dev_init(const struct spdk_ftl_conf *conf, spdk_ftl_init_fn cb, voi
*/
int spdk_ftl_dev_free(struct spdk_ftl_dev *dev, spdk_ftl_fn cb, void *cb_arg);
/**
* Retrieve devices attributes.
*
* \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);
/**
* Retrieve devices configuration.
*
* \param dev device
* \param conf FTL configuration structure to fill
*/
void spdk_ftl_dev_get_conf(const struct spdk_ftl_dev *dev, struct spdk_ftl_conf *conf);
/**
* Initialize FTL configuration structure with default values.
*

View File

@ -17,4 +17,14 @@
#include "ftl_internal.h"
#include "mngt/ftl_mngt.h"
void
spdk_ftl_dev_get_attrs(const struct spdk_ftl_dev *dev, struct spdk_ftl_attrs *attrs)
{
attrs->num_blocks = dev->num_lbas;
attrs->block_size = FTL_BLOCK_SIZE;
attrs->num_zones = ftl_get_num_zones(dev);
attrs->zone_size = ftl_get_num_blocks_in_zone(dev);
attrs->optimum_io_size = dev->xfer_size;
}
SPDK_LOG_REGISTER_COMPONENT(ftl_core)

View File

@ -122,4 +122,16 @@ ftl_get_write_unit_size(struct spdk_bdev *bdev)
return 32;
}
static inline size_t
ftl_get_num_bands(const struct spdk_ftl_dev *dev)
{
return dev->num_bands;
}
static inline size_t
ftl_get_num_zones(const struct spdk_ftl_dev *dev)
{
return ftl_get_num_bands(dev) * ftl_get_num_zones_in_band(dev);
}
#endif /* FTL_CORE_H */

View File

@ -5,6 +5,8 @@
spdk_ftl_dev_init;
spdk_ftl_dev_free;
spdk_ftl_get_default_conf;
spdk_ftl_dev_get_attrs;
spdk_ftl_dev_get_conf;
local: *;
};

View File

@ -20,6 +20,12 @@ spdk_ftl_get_default_conf(struct spdk_ftl_conf *conf)
*conf = g_default_conf;
}
void
spdk_ftl_dev_get_conf(const struct spdk_ftl_dev *dev, struct spdk_ftl_conf *conf)
{
*conf = dev->conf;
}
int
ftl_conf_cpy(struct spdk_ftl_conf *dst, const struct spdk_ftl_conf *src)
{