From eda6b3d002c0ac73670da22b67ca167c4ed19a7c Mon Sep 17 00:00:00 2001 From: Andrey Vagin Date: Fri, 19 Sep 2014 14:20:00 +0400 Subject: [PATCH] zdtm: don't call mount_cgroups a few times concurrently MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Signed-off-by: Pavel Emelyanov --- 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 2c15039cd..368769286 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 f84b64b28..b5133c3bf 100755 --- a/test/zdtm.sh +++ b/test/zdtm.sh @@ -318,23 +318,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 @@ -923,7 +906,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 000000000..6a1982fb6 --- /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