[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