[CRIU] [PATCH] zdtm: don't call mount_cgroups a few times concurrently
Pavel Emelyanov
xemul at parallels.com
Thu Sep 18 09:24:15 PDT 2014
On 09/11/2014 05:29 PM, Andrey Vagin wrote:
> 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 3eca5b7..b650fe3 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
> @@ -925,7 +908,6 @@ while :; do
> # mntns is used to mount /proc
> # net is used to avoid conflicts of parasite sockets
> make zdtm_ct &&
> - flock `basename $0` -c mount_cgroups &&
This hunk is not in the criu repo. Have you forgotten to send some other patch?
> ./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
>
More information about the CRIU
mailing list