lxc: bump version to 1.1.3
Signed-off-by: Marko Ratkaj <marko.ratkaj@sartura.hr>
This commit is contained in:
parent
3831a680ab
commit
085fdc9c3c
3 changed files with 14 additions and 115 deletions
|
@ -8,7 +8,7 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=lxc
|
||||
PKG_VERSION:=1.1.1
|
||||
PKG_VERSION:=1.1.3
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_LICENSE:=LGPL-2.1+ BSD-2-Clause GPL-2.0
|
||||
|
@ -16,7 +16,7 @@ PKG_MAINTAINER:=Luka Perkov <luka@openwrt.org>
|
|||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=http://linuxcontainers.org/downloads/lxc/
|
||||
PKG_MD5SUM:=d80cb08f0edf36f0887e32c96aec8c13
|
||||
PKG_MD5SUM:=197abb5a28ab0b689c737eb1951023fb
|
||||
|
||||
PKG_BUILD_DEPENDS:=lua
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
|
12
utils/lxc/patches/035-lfd-undefined-fix.patch
Normal file
12
utils/lxc/patches/035-lfd-undefined-fix.patch
Normal file
|
@ -0,0 +1,12 @@
|
|||
--- a/src/lxc/bdev.c
|
||||
+++ b/src/lxc/bdev.c
|
||||
@@ -1936,3 +1936,3 @@ static int loop_mount(struct bdev *bdev)
|
||||
{
|
||||
- int lfd, ffd = -1, ret = -1;
|
||||
+ int lfd = -1, ffd = -1, ret = -1;
|
||||
struct loop_info64 lo;
|
||||
@@ -1974,3 +1974,3 @@ out:
|
||||
if (ret < 0) {
|
||||
- close(lfd);
|
||||
+ if (lfd > -1) close(lfd);
|
||||
bdev->lofd = -1;
|
|
@ -1,113 +0,0 @@
|
|||
One of the 'features' of overlayfs is that depending on whether a file
|
||||
is on the upper or lower dir you get back a different device from stat.
|
||||
That breaks our lxc_rmdir_onedev.
|
||||
|
||||
So at lxc_rmdir_ondev check the device of the directory being deleted.
|
||||
If it is overlayfs, then skip the device check.
|
||||
|
||||
Note this is unrelated to overlayfs snapshots - in those cases when you
|
||||
delete a container, /var/lib/lxc/$container/ does not actually have an
|
||||
overlayfs under it. Rather, to reproduce this you would
|
||||
|
||||
sudo mkdir /opt/{lower,upper,workdir}
|
||||
sudo mount -t overlayfs -o lower=/opt/lower,upper=/opt/upper,workdir=/opt/workdir \
|
||||
lxc /var/lib/lxc
|
||||
sudo lxc-create -t download -n c1 -- -d ubuntu -r trusty -a amd64
|
||||
sudo lxc-destroy -n c1
|
||||
|
||||
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
|
||||
---
|
||||
src/lxc/utils.c | 39 ++++++++++++++++++++++++++++++++-------
|
||||
1 file changed, 32 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/src/lxc/utils.c
|
||||
+++ b/src/lxc/utils.c
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
+#include <sys/vfs.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/param.h>
|
||||
@@ -68,8 +69,8 @@
|
||||
|
||||
lxc_log_define(lxc_utils, lxc);
|
||||
|
||||
-static int _recursive_rmdir_onedev(char *dirname, dev_t pdev,
|
||||
- const char *exclude, int level)
|
||||
+static int _recursive_rmdir(char *dirname, dev_t pdev,
|
||||
+ const char *exclude, int level, bool onedev)
|
||||
{
|
||||
struct dirent dirent, *direntp;
|
||||
DIR *dir;
|
||||
@@ -106,7 +107,7 @@ static int _recursive_rmdir_onedev(char
|
||||
if (ret < 0) {
|
||||
switch(errno) {
|
||||
case ENOTEMPTY:
|
||||
- INFO("Not deleting snapshots");
|
||||
+ INFO("Not deleting snapshot %s", pathname);
|
||||
hadexclude = true;
|
||||
break;
|
||||
case ENOTDIR:
|
||||
@@ -129,14 +130,14 @@ static int _recursive_rmdir_onedev(char
|
||||
failed=1;
|
||||
continue;
|
||||
}
|
||||
- if (mystat.st_dev != pdev)
|
||||
+ if (onedev && mystat.st_dev != pdev)
|
||||
continue;
|
||||
if (S_ISDIR(mystat.st_mode)) {
|
||||
- if (_recursive_rmdir_onedev(pathname, pdev, exclude, level+1) < 0)
|
||||
+ if (_recursive_rmdir(pathname, pdev, exclude, level+1, onedev) < 0)
|
||||
failed=1;
|
||||
} else {
|
||||
if (unlink(pathname) < 0) {
|
||||
- ERROR("%s: failed to delete %s", __func__, pathname);
|
||||
+ SYSERROR("%s: failed to delete %s", __func__, pathname);
|
||||
failed=1;
|
||||
}
|
||||
}
|
||||
@@ -158,17 +159,41 @@ static int _recursive_rmdir_onedev(char
|
||||
return failed ? -1 : 0;
|
||||
}
|
||||
|
||||
+/* we have two different magic values for overlayfs, yay */
|
||||
+#define OVERLAYFS_SUPER_MAGIC 0x794c764f
|
||||
+#define OVERLAY_SUPER_MAGIC 0x794c7630
|
||||
+/*
|
||||
+ * In overlayfs, st_dev is unreliable. so on overlayfs we don't do
|
||||
+ * the lxc_rmdir_onedev()
|
||||
+ */
|
||||
+static bool is_native_overlayfs(const char *path)
|
||||
+{
|
||||
+ struct statfs sb;
|
||||
+
|
||||
+ if (statfs(path, &sb) < 0)
|
||||
+ return false;
|
||||
+ if (sb.f_type == OVERLAYFS_SUPER_MAGIC ||
|
||||
+ sb.f_type == OVERLAY_SUPER_MAGIC)
|
||||
+ return true;
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
/* returns 0 on success, -1 if there were any failures */
|
||||
extern int lxc_rmdir_onedev(char *path, const char *exclude)
|
||||
{
|
||||
struct stat mystat;
|
||||
+ bool onedev = true;
|
||||
+
|
||||
+ if (is_native_overlayfs(path)) {
|
||||
+ onedev = false;
|
||||
+ }
|
||||
|
||||
if (lstat(path, &mystat) < 0) {
|
||||
ERROR("%s: failed to stat %s", __func__, path);
|
||||
return -1;
|
||||
}
|
||||
|
||||
- return _recursive_rmdir_onedev(path, mystat.st_dev, exclude, 0);
|
||||
+ return _recursive_rmdir(path, mystat.st_dev, exclude, 0, onedev);
|
||||
}
|
||||
|
||||
static int mount_fs(const char *source, const char *target, const char *type)
|
Loading…
Reference in a new issue