Skip to content

Commit

Permalink
Do not allow snapshots of LVM backed containers
Browse files Browse the repository at this point in the history
They don't work right now, so until we fix that, don't allow it.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
  • Loading branch information
hallyn authored and stgraber committed Aug 8, 2014
1 parent 68c36a3 commit cdd01be
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 0 deletions.
26 changes: 26 additions & 0 deletions src/lxc/bdev.c
Expand Up @@ -521,6 +521,7 @@ static const struct bdev_ops dir_ops = {
.destroy = &dir_destroy,
.create = &dir_create,
.can_snapshot = false,
.can_backup = true,
};


Expand Down Expand Up @@ -785,6 +786,7 @@ static const struct bdev_ops zfs_ops = {
.destroy = &zfs_destroy,
.create = &zfs_create,
.can_snapshot = true,
.can_backup = true,
};

//
Expand Down Expand Up @@ -1180,6 +1182,7 @@ static const struct bdev_ops lvm_ops = {
.destroy = &lvm_destroy,
.create = &lvm_create,
.can_snapshot = true,
.can_backup = false,
};

/*
Expand Down Expand Up @@ -1859,6 +1862,7 @@ static const struct bdev_ops btrfs_ops = {
.destroy = &btrfs_destroy,
.create = &btrfs_create,
.can_snapshot = true,
.can_backup = true,
};

//
Expand Down Expand Up @@ -2130,6 +2134,7 @@ static const struct bdev_ops loop_ops = {
.destroy = &loop_destroy,
.create = &loop_create,
.can_snapshot = false,
.can_backup = true,
};

//
Expand Down Expand Up @@ -2427,6 +2432,7 @@ static const struct bdev_ops overlayfs_ops = {
.destroy = &overlayfs_destroy,
.create = &overlayfs_create,
.can_snapshot = true,
.can_backup = true,
};

//
Expand Down Expand Up @@ -2704,6 +2710,7 @@ static const struct bdev_ops aufs_ops = {
.destroy = &aufs_destroy,
.create = &aufs_create,
.can_snapshot = true,
.can_backup = true,
};

//
Expand Down Expand Up @@ -3013,6 +3020,7 @@ static const struct bdev_ops nbd_ops = {
.destroy = &nbd_destroy,
.create = &nbd_create,
.can_snapshot = true,
.can_backup = false,
};

static const struct bdev_type bdevs[] = {
Expand Down Expand Up @@ -3079,6 +3087,12 @@ struct bdev *bdev_init(struct lxc_conf *conf, const char *src, const char *dst,
struct bdev *bdev;
const struct bdev_type *q;

if (!src)
src = conf->rootfs.path;

if (!src)
return NULL;

q = bdev_query(src);
if (!q)
return NULL;
Expand Down Expand Up @@ -3167,6 +3181,18 @@ bool bdev_is_dir(struct lxc_conf *conf, const char *path)
return ret;
}

bool bdev_can_backup(struct lxc_conf *conf)
{
struct bdev *bdev = bdev_init(conf, NULL, NULL, NULL);
bool ret;

if (!bdev)
return false;
ret = bdev->ops->can_backup;
bdev_put(bdev);
return ret;
}

/*
* is an unprivileged user allowed to make this kind of snapshot
*/
Expand Down
2 changes: 2 additions & 0 deletions src/lxc/bdev.h
Expand Up @@ -47,6 +47,7 @@ struct bdev_ops {
const char *cname, const char *oldpath, const char *lxcpath,
int snap, uint64_t newsize, struct lxc_conf *conf);
bool can_snapshot;
bool can_backup;
};

/*
Expand All @@ -72,6 +73,7 @@ struct bdev {
char *overlay_getlower(char *p);

bool bdev_is_dir(struct lxc_conf *conf, const char *path);
bool bdev_can_backup(struct lxc_conf *conf);

/*
* Instantiate a bdev object. The src is used to determine which blockdev
Expand Down
6 changes: 6 additions & 0 deletions src/lxc/lxccontainer.c
Expand Up @@ -2987,6 +2987,12 @@ static int lxcapi_snapshot(struct lxc_container *c, const char *commentfile)
if (!c || !lxcapi_is_defined(c))
return -1;

if (!bdev_can_backup(c->lxc_conf)) {
ERROR("%s's backing store cannot be backed up.", c->name);
ERROR("Your container must use another backing store type.");
return -1;
}

if (!get_snappath_dir(c, snappath))
return -1;

Expand Down

0 comments on commit cdd01be

Please sign in to comment.