Skip to content

Commit

Permalink
Revert "btrfs: simplify + bugfix"
Browse files Browse the repository at this point in the history
This reverts commit 874a329.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
  • Loading branch information
Christian Brauner committed Aug 15, 2017
1 parent 9fd06d7 commit d8b94f1
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 16 deletions.
3 changes: 1 addition & 2 deletions src/lxc/bdev/bdev.c
Expand Up @@ -392,7 +392,7 @@ struct bdev *bdev_copy(struct lxc_container *c0, const char *cname,
*needs_rdep = 1;
}

if (strcmp(oldpath, lxcpath) && !bdevtype && !snap)
if (strcmp(oldpath, lxcpath) && !bdevtype)
bdevtype = "dir";
else if (!bdevtype)
bdevtype = orig->type;
Expand All @@ -403,7 +403,6 @@ struct bdev *bdev_copy(struct lxc_container *c0, const char *cname,
bdev_put(orig);
return NULL;
}
TRACE("Detected \"%s\" storage driver", new->type);

if (new->ops->clone_paths(orig, new, oldname, cname, oldpath, lxcpath,
snap, newsize, c0->lxc_conf) < 0) {
Expand Down
41 changes: 27 additions & 14 deletions src/lxc/bdev/lxcbtrfs.c
Expand Up @@ -32,18 +32,21 @@
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/vfs.h>

#include "bdev.h"
#include "log.h"
#include "lxcbtrfs.h"
#include "lxcrsync.h"
#include "../utils.h"
#include "utils.h"

lxc_log_define(lxcbtrfs, lxc);

/* defined in lxccontainer.c: needs to become common helper */
extern char *dir_new_path(char *src, const char *oldname, const char *name,
const char *oldpath, const char *lxcpath);

/*
* Return the full path of objid under dirid. Let's say dirid is
* /lxc/c1/rootfs, and objid is /lxc/c1/rootfs/a/b/c. Then we will
Expand Down Expand Up @@ -374,19 +377,29 @@ int btrfs_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname,
if (!orig->dest || !orig->src)
return -1;

if (strcmp(orig->type, "btrfs") && snap) {
ERROR("btrfs snapshot from %s backing store is not supported",
orig->type);
return -1;
}
if (strcmp(orig->type, "btrfs")) {
int len, ret;
if (snap) {
ERROR("btrfs snapshot from %s backing store is not supported",
orig->type);
return -1;
}

new->src = lxc_string_join(
"/",
(const char *[]){"btrfs:", *lxcpath != '/' ? lxcpath : ++lxcpath,
cname, "rootfs", NULL},
false);
if (!new->src)
return -1;
len = strlen(lxcpath) + strlen(cname) + strlen("rootfs") + 6 + 3;
new->src = malloc(len);
if (!new->src)
return -1;

ret = snprintf(new->src, len, "btrfs:%s/%s/rootfs", lxcpath, cname);
if (ret < 0 || ret >= len)
return -1;
} else {
/* In case rootfs is in custom path, reuse it. */
new->src = dir_new_path(orig->src, oldname, cname, oldpath, lxcpath);
if (!new->src)
return -1;

}

src = lxc_storage_get_path(new->src, "btrfs");
new->dest = strdup(src);
Expand Down

0 comments on commit d8b94f1

Please sign in to comment.