]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
storage: prefix all rbd paths
authorChristian Brauner <christian.brauner@ubuntu.com>
Sat, 1 Jul 2017 21:35:58 +0000 (23:35 +0200)
committerChristian Brauner <christian.brauner@ubuntu.com>
Sun, 2 Jul 2017 12:40:05 +0000 (14:40 +0200)
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/bdev/lxcrbd.c

index 8e63c3fd07b081be7d1cce8a87aa634d2303f71a..85001400be5c1775560c0739477cf0a80753fde2 100644 (file)
@@ -66,12 +66,12 @@ int rbd_create(struct bdev *bdev, const char *dest, const char *n,
                rbdname = specs->rbd.rbdname;
 
        /* source device /dev/rbd/lxc/ctn */
-       len = strlen(rbdpool) + strlen(rbdname) + 11;
+       len = strlen(rbdpool) + strlen(rbdname) + 4 + 11;
        bdev->src = malloc(len);
        if (!bdev->src)
                return -1;
 
-       ret = snprintf(bdev->src, len, "/dev/rbd/%s/%s", rbdpool, rbdname);
+       ret = snprintf(bdev->src, len, "rbd:/dev/rbd/%s/%s", rbdpool, rbdname);
        if (ret < 0 || ret >= len)
                return -1;
 
@@ -108,7 +108,7 @@ int rbd_create(struct bdev *bdev, const char *dest, const char *n,
                fstype = DEFAULT_FSTYPE;
 
        cmd_args[0] = fstype;
-       cmd_args[1] = bdev->src;
+       cmd_args[1] = bdev->src + 4;
        ret = run_command(cmd_output, sizeof(cmd_output), do_mkfs_exec_wrapper,
                          (void *)cmd_args);
        if (ret < 0)
@@ -127,14 +127,16 @@ int rbd_create(struct bdev *bdev, const char *dest, const char *n,
 
 int rbd_destroy(struct bdev *orig)
 {
+       char *src;
        pid_t pid;
        char *rbdfullname;
 
-       if ( file_exists(orig->src) ) {
+       src = lxc_storage_get_path(orig->src, orig->type);
+       if (file_exists(src)) {
                if ((pid = fork()) < 0)
                        return -1;
                if (!pid) {
-                       execlp("rbd", "rbd", "unmap" , orig->src, (char *)NULL);
+                       execlp("rbd", "rbd", "unmap" , src, (char *)NULL);
                        exit(1);
                }
                if (wait_for_pid(pid) < 0)
@@ -144,8 +146,8 @@ int rbd_destroy(struct bdev *orig)
        if ((pid = fork()) < 0)
                return -1;
        if (!pid) {
-               rbdfullname = alloca(strlen(orig->src) - 8);
-               strcpy( rbdfullname, &orig->src[9] );
+               rbdfullname = alloca(strlen(src) - 8);
+               strcpy( rbdfullname, &src[9] );
                execlp("rbd", "rbd", "rm" , rbdfullname, (char *)NULL);
                exit(1);
        }
@@ -166,12 +168,15 @@ int rbd_detect(const char *path)
 
 int rbd_mount(struct bdev *bdev)
 {
+       char *src;
        if (strcmp(bdev->type, "rbd"))
                return -22;
+
        if (!bdev->src || !bdev->dest)
                return -22;
 
-       if ( !file_exists(bdev->src) ) {
+       src = lxc_storage_get_path(bdev->src, bdev->type);
+       if (!file_exists(src)) {
                // if blkdev does not exist it should be mapped, because it is not persistent on reboot
                ERROR("Block device %s is not mapped.", bdev->src);
                return -1;
@@ -184,7 +189,9 @@ int rbd_umount(struct bdev *bdev)
 {
        if (strcmp(bdev->type, "rbd"))
                return -22;
+
        if (!bdev->src || !bdev->dest)
                return -22;
+
        return umount(bdev->dest);
 }