unsigned split_count;
uint64_t split_size_mb;
+ SPDK_BDEV_PART_TAILQ splits;
struct spdk_bdev_part_base *split_base;
bool removed;
static TAILQ_HEAD(, spdk_vbdev_split_config) g_split_config = TAILQ_HEAD_INITIALIZER(
g_split_config);
-static SPDK_BDEV_PART_TAILQ g_split_disks = TAILQ_HEAD_INITIALIZER(g_split_disks);
struct vbdev_split_channel {
struct spdk_bdev_part_channel part_ch;
.config_json = vbdev_split_config_json,
};
-SPDK_BDEV_MODULE_REGISTER(&split_if)
+SPDK_BDEV_MODULE_REGISTER(split, &split_if)
static void
vbdev_split_base_free(void *ctx)
}
static void
-vbdev_split_base_bdev_hotremove_cb(void *_base_bdev)
+vbdev_split_base_bdev_hotremove_cb(void *_part_base)
{
- spdk_bdev_part_base_hotremove(_base_bdev, &g_split_disks);
+ struct spdk_bdev_part_base *part_base = _part_base;
+ struct spdk_vbdev_split_config *cfg = spdk_bdev_part_base_get_ctx(part_base);
+
+ spdk_bdev_part_base_hotremove(part_base, &cfg->splits);
}
static void
struct spdk_bdev *split_base_bdev = spdk_bdev_part_get_base_bdev(part);
uint64_t offset_blocks = spdk_bdev_part_get_offset_blocks(part);
- spdk_json_write_name(w, "split");
- spdk_json_write_object_begin(w);
+ spdk_json_write_named_object_begin(w, "split");
- spdk_json_write_name(w, "base_bdev");
- spdk_json_write_string(w, spdk_bdev_get_name(split_base_bdev));
- spdk_json_write_name(w, "offset_blocks");
- spdk_json_write_uint64(w, offset_blocks);
+ spdk_json_write_named_string(w, "base_bdev", spdk_bdev_get_name(split_base_bdev));
+ spdk_json_write_named_uint64(w, "offset_blocks", offset_blocks);
spdk_json_write_object_end(w);
int rc;
char *name;
struct spdk_bdev *base_bdev;
- struct spdk_bdev *split_base_bdev;
struct bdev_part_tailq *split_base_tailq;
assert(cfg->split_count > 0);
" split_size_blocks: %" PRIu64 "\n",
spdk_bdev_get_name(base_bdev), split_count, split_size_blocks);
+ TAILQ_INIT(&cfg->splits);
cfg->split_base = spdk_bdev_part_base_construct(base_bdev,
vbdev_split_base_bdev_hotremove_cb,
&split_if, &vbdev_split_fn_table,
- &g_split_disks, vbdev_split_base_free, cfg,
+ &cfg->splits, vbdev_split_base_free, cfg,
sizeof(struct vbdev_split_channel), NULL, NULL);
if (!cfg->split_base) {
SPDK_ERRLOG("Cannot construct bdev part base\n");
return 0;
err:
- split_base_bdev = spdk_bdev_part_base_get_bdev(cfg->split_base);
split_base_tailq = spdk_bdev_part_base_get_tailq(cfg->split_base);
cfg->removed = true;
- spdk_bdev_part_base_hotremove(split_base_bdev, split_base_tailq);
+ spdk_bdev_part_base_hotremove(cfg->split_base, split_base_tailq);
return rc;
}
static void
vbdev_split_destruct_config(struct spdk_vbdev_split_config *cfg)
{
- struct spdk_bdev *split_base_bdev;
struct bdev_part_tailq *split_base_tailq;
cfg->removed = true;
if (cfg->split_base != NULL) {
- split_base_bdev = spdk_bdev_part_base_get_bdev(cfg->split_base);
split_base_tailq = spdk_bdev_part_base_get_tailq(cfg->split_base);
- spdk_bdev_part_base_hotremove(split_base_bdev, split_base_tailq);
+ spdk_bdev_part_base_hotremove(cfg->split_base, split_base_tailq);
} else {
vbdev_split_del_config(cfg);
}
goto err;
}
- split_count = atoi(split_count_str);
+ split_count = spdk_strtol(split_count_str, 10);
if (split_count < 1) {
SPDK_ERRLOG("Invalid Split count %d\n", split_count);
rc = -EINVAL;
split_size = 0;
split_size_str = spdk_conf_section_get_nmval(sp, "Split", i, 2);
if (split_size_str) {
- split_size = atoi(split_size_str);
+ split_size = spdk_strtol(split_size_str, 10);
if (split_size <= 0) {
SPDK_ERRLOG("Invalid Split size %d\n", split_size);
rc = -EINVAL;