Commit d974bad6 authored by Artur Paszkiewicz's avatar Artur Paszkiewicz Committed by Konrad Sztyber
Browse files

ftl: retrieve device’s attributes and configuration



Signed-off-by: default avatarArtur Paszkiewicz <artur.paszkiewicz@intel.com>
Signed-off-by: default avatarKozlowski 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: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
parent 92b5ebe0
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -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 device’s 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 device’s 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.
 *
+10 −0
Original line number Diff line number Diff line
@@ -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)
+12 −0
Original line number Diff line number Diff line
@@ -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 */
+2 −0
Original line number Diff line number Diff line
@@ -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: *;
};
+6 −0
Original line number Diff line number Diff line
@@ -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)
{