From e20966be67676f34390decddbf5a863e85c34412 Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Mon, 24 Jul 2017 16:32:10 +0200 Subject: [PATCH] dir: improvements Signed-off-by: Christian Brauner --- src/lxc/bdev/lxcdir.c | 68 ++++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 24 deletions(-) diff --git a/src/lxc/bdev/lxcdir.c b/src/lxc/bdev/lxcdir.c index 2e8e69f1e..610425aed 100644 --- a/src/lxc/bdev/lxcdir.c +++ b/src/lxc/bdev/lxcdir.c @@ -39,12 +39,12 @@ int dir_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname, const char *cname, const char *oldpath, const char *lxcpath, int snap, uint64_t newsize, struct lxc_conf *conf) { + char *src_no_prefix; int ret; size_t len; if (snap) { - ERROR("directories cannot be snapshotted. Try aufs or " - "overlayfs."); + ERROR("Directories cannot be snapshotted"); return -1; } @@ -53,17 +53,25 @@ int dir_clonepaths(struct bdev *orig, struct bdev *new, const char *oldname, len = strlen(lxcpath) + strlen(cname) + strlen("rootfs") + 4 + 3; new->src = malloc(len); - if (!new->src) + if (!new->src) { + ERROR("Failed to allocate memory"); return -1; + } ret = snprintf(new->src, len, "dir:%s/%s/rootfs", lxcpath, cname); - if (ret < 0 || (size_t)ret >= len) + if (ret < 0 || (size_t)ret >= len) { + ERROR("Failed to create string"); return -1; + } - new->dest = strdup(new->src + 4); - if (!new->dest) + src_no_prefix = lxc_storage_get_path(new->src, new->type); + new->dest = strdup(src_no_prefix); + if (!new->dest) { + ERROR("Failed to duplicate string \"%s\"", new->src); return -1; + } + TRACE("Created new path \"%s\" for dir storage driver", new->dest); return 0; } @@ -83,40 +91,45 @@ int dir_create(struct bdev *bdev, const char *dest, const char *n, len += strlen(src) + 1; bdev->src = malloc(len); - if (!bdev->src) + if (!bdev->src) { + ERROR("Failed to allocate memory"); return -1; + } ret = snprintf(bdev->src, len, "dir:%s", src); - if (ret < 0 || (size_t)ret >= len) + if (ret < 0 || (size_t)ret >= len) { + ERROR("Failed to create string"); return -1; + } bdev->dest = strdup(dest); - if (!bdev->dest) - return -1; - - ret = mkdir_p(src, 0755); - if (ret < 0) { - ERROR("Failed to create %s", src); + if (!bdev->dest) { + ERROR("Failed to duplicate string \"%s\"", dest); return -1; } - ret = mkdir_p(bdev->dest, 0755); + ret = mkdir_p(dest, 0755); if (ret < 0) { - ERROR("Failed to create %s", bdev->dest); + ERROR("Failed to create directory \"%s\"", dest); return -1; } + TRACE("Created directory \"%s\"", dest); return 0; } int dir_destroy(struct bdev *orig) { + int ret; char *src; src = lxc_storage_get_path(orig->src, orig->src); - if (lxc_rmdir_onedev(src, NULL) < 0) + ret = lxc_rmdir_onedev(src, NULL); + if (ret < 0) { + ERROR("Failed to delete \"%s\"", src); return -1; + } return 0; } @@ -134,10 +147,9 @@ int dir_detect(const char *path) int dir_mount(struct bdev *bdev) { - unsigned long mntflags; - char *src, *mntdata; int ret; - unsigned long mflags; + unsigned long mflags, mntflags; + char *src, *mntdata; if (strcmp(bdev->type, "dir")) return -22; @@ -145,7 +157,9 @@ int dir_mount(struct bdev *bdev) if (!bdev->src || !bdev->dest) return -22; - if (parse_mntopts(bdev->mntopts, &mntflags, &mntdata) < 0) { + ret = parse_mntopts(bdev->mntopts, &mntflags, &mntdata); + if (ret < 0) { + ERROR("Failed to parse mount options \"%s\"", bdev->mntopts); free(mntdata); return -22; } @@ -155,13 +169,19 @@ int dir_mount(struct bdev *bdev) ret = mount(src, bdev->dest, "bind", MS_BIND | MS_REC | mntflags, mntdata); if ((0 == ret) && (mntflags & MS_RDONLY)) { - DEBUG("remounting %s on %s with readonly options", + DEBUG("Remounting \"%s\" on \"%s\" readonly", src ? src : "(none)", bdev->dest ? bdev->dest : "(none)"); - mflags = add_required_remount_flags( - src, bdev->dest, MS_BIND | MS_REC | mntflags | MS_REMOUNT); + mflags = add_required_remount_flags(src, bdev->dest, MS_BIND | MS_REC | mntflags | MS_REMOUNT); ret = mount(src, bdev->dest, "bind", mflags, mntdata); } + if (ret < 0) { + SYSERROR("Failed to mount \"%s\" on \"%s\"", src, bdev->dest); + free(mntdata); + return -1; + } + + TRACE("Mounted \"%s\" on \"%s\"", src, bdev->dest); free(mntdata); return ret; } -- 2.47.3