Revert "rbd: rework rbd storage driver"

This reverts commit 93b8f59a. Signed-off-by: 's avatarChristian Brauner <christian.brauner@ubuntu.com>
parent 93b8f59a
...@@ -36,50 +36,6 @@ ...@@ -36,50 +36,6 @@
lxc_log_define(lxcrbd, lxc); lxc_log_define(lxcrbd, lxc);
struct rbd_args {
const char *osd_pool_name;
const char *rbd_name;
const char *size;
};
int rbd_create_wrapper(void *data)
{
struct rbd_args *args = data;
execlp("rbd", "rbd", "create", "--pool", args->osd_pool_name,
args->rbd_name, "--size", args->size, (char *)NULL);
return -1;
}
int rbd_map_wrapper(void *data)
{
struct rbd_args *args = data;
execlp("rbd", "rbd", "map", "--pool", args->osd_pool_name,
args->rbd_name, (char *)NULL);
return -1;
}
int rbd_unmap_wrapper(void *data)
{
struct rbd_args *args = data;
execlp("rbd", "rbd", "unmap", args->rbd_name, (char *)NULL);
return -1;
}
int rbd_delete_wrapper(void *data)
{
struct rbd_args *args = data;
execlp("rbd", "rbd", "rm", args->rbd_name, (char *)NULL);
return -1;
}
int rbd_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname, int rbd_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname,
const char *cname, const char *oldpath, const char *lxcpath, const char *cname, const char *oldpath, const char *lxcpath,
int snap, uint64_t newsize, struct lxc_conf *conf) int snap, uint64_t newsize, struct lxc_conf *conf)
...@@ -91,14 +47,13 @@ int rbd_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname, ...@@ -91,14 +47,13 @@ int rbd_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname,
int rbd_create(struct bdev *bdev, const char *dest, const char *n, int rbd_create(struct bdev *bdev, const char *dest, const char *n,
struct bdev_specs *specs) struct bdev_specs *specs)
{ {
const char *rbdpool, *fstype; const char *rbdpool, *rbdname = n, *fstype;
uint64_t size; uint64_t size;
int ret, len; int ret, len;
char sz[24]; char sz[24];
pid_t pid;
const char *cmd_args[2]; const char *cmd_args[2];
char cmd_output[MAXPATHLEN]; char cmd_output[MAXPATHLEN];
const char *rbdname = n;
struct rbd_args args = {0};
if (!specs) if (!specs)
return -1; return -1;
...@@ -113,16 +68,12 @@ int rbd_create(struct bdev *bdev, const char *dest, const char *n, ...@@ -113,16 +68,12 @@ int rbd_create(struct bdev *bdev, const char *dest, const char *n,
/* source device /dev/rbd/lxc/ctn */ /* source device /dev/rbd/lxc/ctn */
len = strlen(rbdpool) + strlen(rbdname) + 4 + 11; len = strlen(rbdpool) + strlen(rbdname) + 4 + 11;
bdev->src = malloc(len); bdev->src = malloc(len);
if (!bdev->src) { if (!bdev->src)
ERROR("Failed to allocate memory");
return -1; return -1;
}
ret = snprintf(bdev->src, len, "rbd:/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)
ERROR("Failed to create string");
return -1; return -1;
}
/* fssize is in bytes */ /* fssize is in bytes */
size = specs->fssize; size = specs->fssize;
...@@ -131,92 +82,78 @@ int rbd_create(struct bdev *bdev, const char *dest, const char *n, ...@@ -131,92 +82,78 @@ int rbd_create(struct bdev *bdev, const char *dest, const char *n,
/* in megabytes for rbd tool */ /* in megabytes for rbd tool */
ret = snprintf(sz, 24, "%" PRIu64, size / 1024 / 1024); ret = snprintf(sz, 24, "%" PRIu64, size / 1024 / 1024);
if (ret < 0 || ret >= 24) { if (ret < 0 || ret >= 24)
ERROR("Failed to create string"); exit(1);
return -1;
}
args.osd_pool_name = rbdpool; if ((pid = fork()) < 0)
args.rbd_name = rbdname;
args.size = sz;
ret = run_command(cmd_output, sizeof(cmd_output), rbd_create_wrapper,
(void *)&args);
if (ret < 0) {
ERROR("Failed to create rbd storage volume \"%s\": %s", rbdname,
cmd_output);
return -1; return -1;
if (!pid) {
execlp("rbd", "rbd", "create", "--pool", rbdpool, rbdname,
"--size", sz, (char *)NULL);
exit(1);
} }
if (wait_for_pid(pid) < 0)
return -1;
ret = run_command(cmd_output, sizeof(cmd_output), rbd_map_wrapper, if ((pid = fork()) < 0)
(void *)&args);
if (ret < 0) {
ERROR("Failed to map rbd storage volume \"%s\": %s", rbdname,
cmd_output);
return -1; return -1;
if (!pid) {
execlp("rbd", "rbd", "map", "--pool", rbdpool, rbdname,
(char *)NULL);
exit(1);
} }
if (wait_for_pid(pid) < 0)
return -1;
fstype = specs->fstype; fstype = specs->fstype;
if (!fstype) if (!fstype)
fstype = DEFAULT_FSTYPE; fstype = DEFAULT_FSTYPE;
cmd_args[0] = fstype; cmd_args[0] = fstype;
cmd_args[1] = lxc_storage_get_path(bdev->src, bdev->type); 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)
ERROR("Failed to map rbd storage volume \"%s\": %s", rbdname,
cmd_output);
return -1; return -1;
}
bdev->dest = strdup(dest); if (!(bdev->dest = strdup(dest)))
if (!bdev->dest) {
ERROR("Failed to duplicate string \"%s\"", dest);
return -1; return -1;
}
ret = mkdir_p(bdev->dest, 0755); if (mkdir_p(bdev->dest, 0755) < 0 && errno != EEXIST) {
if (ret < 0 && errno != EEXIST) { ERROR("Error creating %s", bdev->dest);
ERROR("Failed to create directory \"%s\"", bdev->dest);
return -1; return -1;
} }
TRACE("Created rbd storage volume \"%s\"", bdev->dest);
return 0; return 0;
} }
int rbd_destroy(struct bdev *orig) int rbd_destroy(struct bdev *orig)
{ {
int ret;
char *src; char *src;
pid_t pid;
char *rbdfullname; char *rbdfullname;
char cmd_output[MAXPATHLEN];
struct rbd_args args = {0};
src = lxc_storage_get_path(orig->src, orig->type); src = lxc_storage_get_path(orig->src, orig->type);
if (file_exists(src)) { if (file_exists(src)) {
args.rbd_name = src; if ((pid = fork()) < 0)
ret = run_command(cmd_output, sizeof(cmd_output),
rbd_unmap_wrapper, (void *)&args);
if (ret < 0) {
ERROR("Failed to map rbd storage volume \"%s\": %s",
src, cmd_output);
return -1; return -1;
if (!pid) {
execlp("rbd", "rbd", "unmap", src, (char *)NULL);
exit(1);
} }
if (wait_for_pid(pid) < 0)
return -1;
} }
rbdfullname = alloca(strlen(src) - 8); if ((pid = fork()) < 0)
strcpy(rbdfullname, &src[9]);
args.rbd_name = rbdfullname;
ret = run_command(cmd_output, sizeof(cmd_output),
rbd_delete_wrapper, (void *)&args);
if (ret < 0) {
ERROR("Failed to delete rbd storage volume \"%s\": %s",
rbdfullname, cmd_output);
return -1; return -1;
if (!pid) {
rbdfullname = alloca(strlen(src) - 8);
strcpy(rbdfullname, &src[9]);
execlp("rbd", "rbd", "rm", rbdfullname, (char *)NULL);
exit(1);
} }
return wait_for_pid(pid);
return 0;
} }
int rbd_detect(const char *path) int rbd_detect(const char *path)
...@@ -229,7 +166,6 @@ int rbd_detect(const char *path) ...@@ -229,7 +166,6 @@ int rbd_detect(const char *path)
int rbd_mount(struct bdev *bdev) int rbd_mount(struct bdev *bdev)
{ {
char *src; char *src;
if (strcmp(bdev->type, "rbd")) if (strcmp(bdev->type, "rbd"))
return -22; return -22;
...@@ -245,7 +181,7 @@ int rbd_mount(struct bdev *bdev) ...@@ -245,7 +181,7 @@ int rbd_mount(struct bdev *bdev)
return -1; return -1;
} }
return mount_unknown_fs(src, bdev->dest, bdev->mntopts); return mount_unknown_fs(bdev->src, bdev->dest, bdev->mntopts);
} }
int rbd_umount(struct bdev *bdev) int rbd_umount(struct bdev *bdev)
......
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