[CRIU] [PATCH] zdtm: don't call mount_cgroups a few times concurrently
Andrey Vagin
avagin at openvz.org
Fri Sep 19 03:20:41 PDT 2014
Here is a race now:
./zdtm.sh --ct -d -C -x static/cgroup02 ns/static/pipe02 &> ns_static_pipe02.log || \
{ flock Makefile cat ns_static_pipe02.log; exit 1; }
./zdtm.sh --ct -d -C -x static/cgroup02 ns/static/busyloop00 &> ns_static_busyloop00.log || \
{ flock Makefile cat ns_static_busyloop00.log; exit 1; }
make[3]: `zdtm_ct' is up to date.
mkdir: cannot create directory ‘zdtm.GgIjUS/holder’: File exists
Reported-by: Mr Jenkins
Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
test/Makefile | 5 ++++-
test/zdtm.sh | 18 ------------------
test/zdtm_mount_cgroups | 16 ++++++++++++++++
3 files changed, 20 insertions(+), 19 deletions(-)
create mode 100755 test/zdtm_mount_cgroups
diff --git a/test/Makefile b/test/Makefile
index 2c15039..3687692 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -42,7 +42,10 @@ clean:
$(Q) $(MAKE) -C libcriu clean
$(Q) $(MAKE) -C rpc clean
-$(TST): zdtm_ct
+mount_cgroups: .FORCE
+ flock zdtm_mount_cgroups ./zdtm_mount_cgroups
+
+$(TST): zdtm_ct mount_cgroups .FORCE
./zdtm.sh --ct ${ZDTM_ARGS} $(@) &> $(subst /,_,$@).log || \
{ flock Makefile cat $(subst /,_,$@).log; exit 1; }
.PHONY: zdtm_ns
diff --git a/test/zdtm.sh b/test/zdtm.sh
index f6011ea..d247b22 100755
--- a/test/zdtm.sh
+++ b/test/zdtm.sh
@@ -315,23 +315,6 @@ exit_callback()
}
trap exit_callback EXIT
-# If a controller is mounted during dumping processes, criu may fail with error:
-# Error (cgroup.c:768): cg: Set 3 is not subset of 2
-# so lets mount all test controllers before executing tests.
-mount_cgroups()
-{
- cat /proc/self/cgroup | grep zdtmtst.defaultroot && return
- local tdir
- tdir=`mktemp -d zdtm.XXXXXX`
- for i in "zdtmtst" "zdtmtst.defaultroot"; do
- mount -t cgroup -o none,name=$i zdtm $tdir &&
- # a fake group prevents destroying of a controller
- mkdir $tdir/holder &&
- umount $tdir || return 1
- done
- rmdir $tdir
-}
-
construct_root()
{
local root=$1
@@ -920,7 +903,6 @@ while :; do
# mntns is used to mount /proc
# net is used to avoid conflicts of parasite sockets
make zdtm_ct &&
- mount_cgroups &&
./zdtm_ct ./zdtm.sh "$@"
exit
}
diff --git a/test/zdtm_mount_cgroups b/test/zdtm_mount_cgroups
new file mode 100755
index 0000000..6a1982f
--- /dev/null
+++ b/test/zdtm_mount_cgroups
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+# If a controller is created during dumping processes, criu may fail with error:
+# Error (cgroup.c:768): cg: Set 3 is not subset of 2
+# so lets create all test controllers before executing tests.
+
+cat /proc/self/cgroup | grep zdtmtst.defaultroot && exit
+
+tdir=`mktemp -d zdtm.XXXXXX`
+for i in "zdtmtst" "zdtmtst.defaultroot"; do
+ mount -t cgroup -o none,name=$i zdtm $tdir &&
+ # a fake group prevents destroying of a controller
+ mkdir $tdir/holder &&
+ umount $tdir || exit 1
+done
+rmdir $tdir
--
1.9.3
More information about the CRIU
mailing list