Skip to content

Commit

Permalink
btrfs: simplify
Browse files Browse the repository at this point in the history
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
  • Loading branch information
Christian Brauner committed Jul 31, 2017
1 parent 45dd65e commit fc0fd9a
Showing 1 changed file with 4 additions and 30 deletions.
34 changes: 4 additions & 30 deletions src/lxc/bdev/bdev.c
Expand Up @@ -406,6 +406,10 @@ struct bdev *bdev_copy(struct lxc_container *c0, const char *cname,
}
TRACE("Detected \"%s\" storage driver", new->type);

if (bdevtype && !strcmp(orig->type, "btrfs") &&
!strcmp(new->type, "btrfs"))
snap = 1;

if (new->ops->clone_paths(orig, new, oldname, cname, oldpath, lxcpath,
snap, newsize, c0->lxc_conf) < 0) {
ERROR("Failed getting pathnames for clone of \"%s\"", src);
Expand All @@ -427,36 +431,6 @@ struct bdev *bdev_copy(struct lxc_container *c0, const char *cname,
if (snap)
return new;

/* https://github.com/lxc/lxc/issues/131
* Use btrfs snapshot feature instead of rsync to restore if both orig
* and new are btrfs.
*/
if (bdevtype && strcmp(orig->type, "btrfs") == 0 &&
strcmp(new->type, "btrfs") == 0 &&
btrfs_same_fs(orig->dest, new->dest) == 0) {
struct rsync_data_char arg;

if (btrfs_destroy(new) < 0) {
ERROR("Failed to destroy \"%s\" btrfs subvolume", new->dest);
goto err;
}

arg.src = orig->dest;
arg.dest = new->dest;
if (am_unpriv())
ret = userns_exec_1(c0->lxc_conf, btrfs_snapshot_wrapper,
&arg, "btrfs_snapshot_wrapper");
else
ret = btrfs_snapshot(orig->dest, new->dest);
if (ret < 0) {
SYSERROR("Failed to create btrfs snapshot \"%s\" of \"%s\"",
new->dest, orig->dest);
goto err;
}
bdev_put(orig);
return new;
}

pid = fork();
if (pid < 0) {
SYSERROR("fork");
Expand Down

0 comments on commit fc0fd9a

Please sign in to comment.