storage: prefix all rbd paths

parent 094c1904
...@@ -66,12 +66,12 @@ int rbd_create(struct bdev *bdev, const char *dest, const char *n, ...@@ -66,12 +66,12 @@ int rbd_create(struct bdev *bdev, const char *dest, const char *n,
rbdname = specs->rbd.rbdname; rbdname = specs->rbd.rbdname;
/* source device /dev/rbd/lxc/ctn */ /* source device /dev/rbd/lxc/ctn */
len = strlen(rbdpool) + strlen(rbdname) + 11; len = strlen(rbdpool) + strlen(rbdname) + 4 + 11;
bdev->src = malloc(len); bdev->src = malloc(len);
if (!bdev->src) if (!bdev->src)
return -1; 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) if (ret < 0 || ret >= len)
return -1; return -1;
...@@ -108,7 +108,7 @@ int rbd_create(struct bdev *bdev, const char *dest, const char *n, ...@@ -108,7 +108,7 @@ int rbd_create(struct bdev *bdev, const char *dest, const char *n,
fstype = DEFAULT_FSTYPE; fstype = DEFAULT_FSTYPE;
cmd_args[0] = 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, ret = run_command(cmd_output, sizeof(cmd_output), do_mkfs_exec_wrapper,
(void *)cmd_args); (void *)cmd_args);
if (ret < 0) if (ret < 0)
...@@ -127,14 +127,16 @@ int rbd_create(struct bdev *bdev, const char *dest, const char *n, ...@@ -127,14 +127,16 @@ int rbd_create(struct bdev *bdev, const char *dest, const char *n,
int rbd_destroy(struct bdev *orig) int rbd_destroy(struct bdev *orig)
{ {
char *src;
pid_t pid; pid_t pid;
char *rbdfullname; char *rbdfullname;
if ( file_exists(orig->src) ) { src = lxc_storage_get_path(orig->src, orig->type);
if (file_exists(src)) {
if ((pid = fork()) < 0) if ((pid = fork()) < 0)
return -1; return -1;
if (!pid) { if (!pid) {
execlp("rbd", "rbd", "unmap" , orig->src, (char *)NULL); execlp("rbd", "rbd", "unmap" , src, (char *)NULL);
exit(1); exit(1);
} }
if (wait_for_pid(pid) < 0) if (wait_for_pid(pid) < 0)
...@@ -144,8 +146,8 @@ int rbd_destroy(struct bdev *orig) ...@@ -144,8 +146,8 @@ int rbd_destroy(struct bdev *orig)
if ((pid = fork()) < 0) if ((pid = fork()) < 0)
return -1; return -1;
if (!pid) { if (!pid) {
rbdfullname = alloca(strlen(orig->src) - 8); rbdfullname = alloca(strlen(src) - 8);
strcpy( rbdfullname, &orig->src[9] ); strcpy( rbdfullname, &src[9] );
execlp("rbd", "rbd", "rm" , rbdfullname, (char *)NULL); execlp("rbd", "rbd", "rm" , rbdfullname, (char *)NULL);
exit(1); exit(1);
} }
...@@ -166,12 +168,15 @@ int rbd_detect(const char *path) ...@@ -166,12 +168,15 @@ int rbd_detect(const char *path)
int rbd_mount(struct bdev *bdev) int rbd_mount(struct bdev *bdev)
{ {
char *src;
if (strcmp(bdev->type, "rbd")) if (strcmp(bdev->type, "rbd"))
return -22; return -22;
if (!bdev->src || !bdev->dest) if (!bdev->src || !bdev->dest)
return -22; 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 // 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); ERROR("Block device %s is not mapped.", bdev->src);
return -1; return -1;
...@@ -184,7 +189,9 @@ int rbd_umount(struct bdev *bdev) ...@@ -184,7 +189,9 @@ int rbd_umount(struct bdev *bdev)
{ {
if (strcmp(bdev->type, "rbd")) if (strcmp(bdev->type, "rbd"))
return -22; return -22;
if (!bdev->src || !bdev->dest) if (!bdev->src || !bdev->dest)
return -22; return -22;
return umount(bdev->dest); return umount(bdev->dest);
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment