]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/spdk/lib/bdev/split/vbdev_split.c
import 15.2.0 Octopus source
[ceph.git] / ceph / src / spdk / lib / bdev / split / vbdev_split.c
index 97f119841a1f47abd7b8c1d46013f185794e8b42..2cf5f58828d6c0a28c7752f7e86af905e5b08d17 100644 (file)
@@ -53,6 +53,7 @@ struct spdk_vbdev_split_config {
        unsigned split_count;
        uint64_t split_size_mb;
 
+       SPDK_BDEV_PART_TAILQ splits;
        struct spdk_bdev_part_base *split_base;
        bool removed;
 
@@ -61,7 +62,6 @@ struct spdk_vbdev_split_config {
 
 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;
@@ -95,7 +95,7 @@ static struct spdk_bdev_module split_if = {
        .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)
@@ -117,9 +117,12 @@ vbdev_split_destruct(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
@@ -175,13 +178,10 @@ vbdev_split_dump_info_json(void *ctx, struct spdk_json_write_ctx *w)
        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);
 
@@ -211,7 +211,6 @@ vbdev_split_create(struct spdk_vbdev_split_config *cfg)
        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);
@@ -248,10 +247,11 @@ vbdev_split_create(struct spdk_vbdev_split_config *cfg)
                      " 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");
@@ -293,10 +293,9 @@ vbdev_split_create(struct spdk_vbdev_split_config *cfg)
 
        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;
 }
 
@@ -311,14 +310,12 @@ vbdev_split_del_config(struct spdk_vbdev_split_config *cfg)
 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);
        }
@@ -429,7 +426,7 @@ vbdev_split_init(void)
                        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;
@@ -440,7 +437,7 @@ vbdev_split_init(void)
                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;