enum spdk_ftl_mode {
/* Create new device */
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;
/* Optimal IO size - bdev layer will split requests over this size */
uint64_t optimum_io_size;
};
struct spdk_ftl_conf {
char *name
struct spdk_uuid uuid
uint64_t overprovisioning;
/* 核心线程和其他GC线程的mask */
char *core_mask;
/* 每个用户进程的IO池大小 */
size_t user_io_pool_size;
/* FTL 启动模式 */
uint32_t mode;
/* 名字 */
char *base_bdev;
char *cache_bdev;
};
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);
// 在给定的一堆bdevs上初始化FTL,一旦接受到一个成功完成的回调,用户则可以进行I/O
int spdk_ftl_dev_init(const struct spdk_ftl_conf *conf, spdk_ftl_init_fn cb, void *cb_arg);
int spdk_ftl_dev_free(struct spdk_ftl_dev *dev, spdk_ftl_fn cb, void *cb_arg);
void spdk_ftl_get_default_conf(struct spdk_ftl_conf *conf);