From: Christian Brauner Date: Sat, 1 Jul 2017 21:35:58 +0000 (+0200) Subject: storage: prefix all rbd paths X-Git-Tag: lxc-2.1.0~58^2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=43bd0ebf97a4c09607306a5589e48477166afa18;p=thirdparty%2Flxc.git storage: prefix all rbd paths Signed-off-by: Christian Brauner --- diff --git a/src/lxc/bdev/lxcrbd.c b/src/lxc/bdev/lxcrbd.c index 8e63c3fd0..85001400b 100644 --- a/src/lxc/bdev/lxcrbd.c +++ b/src/lxc/bdev/lxcrbd.c @@ -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); }