Unverified Commit 6be74c07 by Christian Brauner Committed by Stéphane Graber

storage: prefix all lvm paths

parent f405c0c5
...@@ -162,21 +162,30 @@ int lvm_detect(const char *path) ...@@ -162,21 +162,30 @@ int lvm_detect(const char *path)
int lvm_mount(struct bdev *bdev) int lvm_mount(struct bdev *bdev)
{ {
char *src;
if (strcmp(bdev->type, "lvm")) if (strcmp(bdev->type, "lvm"))
return -22; return -22;
if (!bdev->src || !bdev->dest) if (!bdev->src || !bdev->dest)
return -22; return -22;
/* if we might pass in data sometime, then we'll have to enrich
* mount_unknown_fs */ src = lxc_storage_get_path(bdev->src, bdev->type);
return mount_unknown_fs(bdev->src, bdev->dest, bdev->mntopts);
/* If we might pass in data sometime, then we'll have to enrich
* mount_unknown_fs().
*/
return mount_unknown_fs(src, bdev->dest, bdev->mntopts);
} }
int lvm_umount(struct bdev *bdev) int lvm_umount(struct bdev *bdev)
{ {
if (strcmp(bdev->type, "lvm")) if (strcmp(bdev->type, "lvm"))
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);
} }
...@@ -298,10 +307,12 @@ int lvm_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname, ...@@ -298,10 +307,12 @@ int lvm_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname,
return -1; return -1;
} }
vg = lxc_global_config_value("lxc.bdev.lvm.vg"); vg = lxc_global_config_value("lxc.bdev.lvm.vg");
len = strlen("/dev/") + strlen(vg) + strlen(cname) + 2; len = strlen("/dev/") + strlen(vg) + strlen(cname) + 4 + 2;
if ((new->src = malloc(len)) == NULL) new->src = malloc(len);
if (new->src)
return -1; return -1;
ret = snprintf(new->src, len, "/dev/%s/%s", vg, cname);
ret = snprintf(new->src, len, "lvm:/dev/%s/%s", vg, cname);
if (ret < 0 || ret >= len) if (ret < 0 || ret >= len)
return -1; return -1;
} else { } else {
...@@ -342,18 +353,26 @@ int lvm_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname, ...@@ -342,18 +353,26 @@ int lvm_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname,
} }
if (snap) { if (snap) {
if (lvm_snapshot(orig->src, new->src, size) < 0) { char *newsrc, *origsrc;
origsrc = lxc_storage_get_path(orig->src, "lvm");
newsrc = lxc_storage_get_path(new->src, "lvm");
if (lvm_snapshot(origsrc, newsrc, size) < 0) {
ERROR("could not create %s snapshot of %s", new->src, orig->src); ERROR("could not create %s snapshot of %s", new->src, orig->src);
return -1; return -1;
} }
} else { } else {
if (do_lvm_create(new->src, size, lxc_global_config_value("lxc.bdev.lvm.thin_pool")) < 0) { char *src;
src = lxc_storage_get_path(new->src, "lvm");
if (do_lvm_create(src, size, lxc_global_config_value("lxc.bdev.lvm.thin_pool")) < 0) {
ERROR("Error creating new lvm blockdev"); ERROR("Error creating new lvm blockdev");
return -1; return -1;
} }
cmd_args[0] = fstype; cmd_args[0] = fstype;
cmd_args[1] = new->src; cmd_args[1] = src;
// create an fs in the loopback file // create an fs in the loopback file
ret = run_command(cmd_output, sizeof(cmd_output), ret = run_command(cmd_output, sizeof(cmd_output),
do_mkfs_exec_wrapper, (void *)cmd_args); do_mkfs_exec_wrapper, (void *)cmd_args);
...@@ -366,15 +385,20 @@ int lvm_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname, ...@@ -366,15 +385,20 @@ int lvm_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname,
int lvm_destroy(struct bdev *orig) int lvm_destroy(struct bdev *orig)
{ {
char *src;
pid_t pid; pid_t pid;
if ((pid = fork()) < 0) if ((pid = fork()) < 0)
return -1; return -1;
if (!pid) { if (!pid) {
(void)setenv("LVM_SUPPRESS_FD_WARNINGS", "1", 1); (void)setenv("LVM_SUPPRESS_FD_WARNINGS", "1", 1);
execlp("lvremove", "lvremove", "-f", orig->src, (char *)NULL); src = lxc_storage_get_path(orig->src, "lvm");
execlp("lvremove", "lvremove", "-f", src, (char *)NULL);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
return wait_for_pid(pid); return wait_for_pid(pid);
} }
...@@ -402,12 +426,12 @@ int lvm_create(struct bdev *bdev, const char *dest, const char *n, ...@@ -402,12 +426,12 @@ int lvm_create(struct bdev *bdev, const char *dest, const char *n,
if (specs->lvm.lv) if (specs->lvm.lv)
lv = specs->lvm.lv; lv = specs->lvm.lv;
len = strlen(vg) + strlen(lv) + 7; len = strlen(vg) + strlen(lv) + 4 + 7;
bdev->src = malloc(len); bdev->src = malloc(len);
if (!bdev->src) if (!bdev->src)
return -1; return -1;
ret = snprintf(bdev->src, len, "/dev/%s/%s", vg, lv); ret = snprintf(bdev->src, len, "lvm:/dev/%s/%s", vg, lv);
if (ret < 0 || ret >= len) if (ret < 0 || ret >= len)
return -1; return -1;
...@@ -416,7 +440,7 @@ int lvm_create(struct bdev *bdev, const char *dest, const char *n, ...@@ -416,7 +440,7 @@ int lvm_create(struct bdev *bdev, const char *dest, const char *n,
if (!sz) if (!sz)
sz = DEFAULT_FS_SIZE; sz = DEFAULT_FS_SIZE;
if (do_lvm_create(bdev->src, sz, thinpool) < 0) { if (do_lvm_create(bdev->src + 4, sz, thinpool) < 0) {
ERROR("Error creating new lvm blockdev %s size %"PRIu64" bytes", bdev->src, sz); ERROR("Error creating new lvm blockdev %s size %"PRIu64" bytes", bdev->src, sz);
return -1; return -1;
} }
...@@ -426,7 +450,7 @@ int lvm_create(struct bdev *bdev, const char *dest, const char *n, ...@@ -426,7 +450,7 @@ int lvm_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)
......
...@@ -129,12 +129,10 @@ bool attach_block_device(struct lxc_conf *conf) ...@@ -129,12 +129,10 @@ bool attach_block_device(struct lxc_conf *conf)
int blk_getsize(struct bdev *bdev, uint64_t *size) int blk_getsize(struct bdev *bdev, uint64_t *size)
{ {
int fd, ret; int fd, ret;
char *path = bdev->src; char *src;
if (strcmp(bdev->type, "loop") == 0) src = lxc_storage_get_path(bdev->src, bdev->type);
path = bdev->src + 5; fd = open(src, O_RDONLY);
fd = open(path, O_RDONLY);
if (fd < 0) if (fd < 0)
return -1; return -1;
...@@ -163,15 +161,12 @@ int detect_fs(struct bdev *bdev, char *type, int len) ...@@ -163,15 +161,12 @@ int detect_fs(struct bdev *bdev, char *type, int len)
size_t linelen; size_t linelen;
pid_t pid; pid_t pid;
FILE *f; FILE *f;
char *sp1, *sp2, *sp3, *line = NULL; char *sp1, *sp2, *sp3, *srcdev, *line = NULL;
char *srcdev;
if (!bdev || !bdev->src || !bdev->dest) if (!bdev || !bdev->src || !bdev->dest)
return -1; return -1;
srcdev = bdev->src; srcdev = lxc_storage_get_path(bdev->src, bdev->type);
if (strcmp(bdev->type, "loop") == 0)
srcdev = bdev->src + 5;
ret = pipe(p); ret = pipe(p);
if (ret < 0) if (ret < 0)
......
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