[CRIU] [PATCH 7/7] zdtm: emulate situation invalid files in irmap cache

Pavel Emelyanov xemul at virtuozzo.com
Wed Mar 9 04:36:38 PST 2016


On 03/08/2016 09:44 PM, Andrey Vagin wrote:
> Signed-off-by: Andrew Vagin <avagin at virtuozzo.com>

Please, elaborate on this patch. This test is normally run with
--force-irmap option, what's bad/wrong with it?

> ---
>  test/jenkins/criu-fault.sh          |  1 +
>  test/zdtm/static/inotify_irmap.c    | 50 +++++++++++++++++++++----------------
>  test/zdtm/static/inotify_irmap.desc |  2 +-
>  test/zdtm/static/inotify_irmap.hook | 18 +++++++++++++
>  4 files changed, 49 insertions(+), 22 deletions(-)
>  create mode 100755 test/zdtm/static/inotify_irmap.hook
> 
> diff --git a/test/jenkins/criu-fault.sh b/test/jenkins/criu-fault.sh
> index 82f8f73..61a6bf1 100755
> --- a/test/jenkins/criu-fault.sh
> +++ b/test/jenkins/criu-fault.sh
> @@ -4,3 +4,4 @@ source `dirname $0`/criu-lib.sh
>  prep
>  ./test/zdtm.py run -t zdtm/static/env00 --fault 1 --report report -f h || fail
>  ./test/zdtm.py run -t zdtm/static/unlink_fstat00 --fault 2 --report report -f h || fail
> +./test/zdtm.py run -t zdtm/static/inotify_irmap --fault 3  --pre 2 -f uns || fail
> diff --git a/test/zdtm/static/inotify_irmap.c b/test/zdtm/static/inotify_irmap.c
> index e16a418..8722010 100644
> --- a/test/zdtm/static/inotify_irmap.c
> +++ b/test/zdtm/static/inotify_irmap.c
> @@ -19,51 +19,59 @@ const char *test_doc	= "Check for irmap";
>  const char *test_author	= "Pavel Emelyanov <xemul at parallels.com>";
>  
>  #define TDIR	"/etc"
> -#define TFIL	TDIR"/zdtm-test"
> +char test_files[2][128] = {TDIR"/zdtm-test", TDIR"/zdtm-test1"};
>  
>  #define BUFF_SIZE ((sizeof(struct inotify_event) + PATH_MAX))
>  
>  int main (int argc, char *argv[])
>  {
>  	char buf[BUFF_SIZE];
> -	int fd, wd;
> +	int fd, wd, i;
>  
>  	test_init(argc, argv);
>  
> -	unlink(TFIL);
> -	if (creat(TFIL, 0600) < 0) {
> -		pr_perror("Can't make test file");
> -		exit(1);
> +	for (i = 0; i < 2; i++) {
> +		unlink(test_files[i]);
> +		if (creat(test_files[i], 0600) < 0) {
> +			pr_perror("Can't make test file");
> +			exit(1);
> +		}
>  	}
>  
>  	fd = inotify_init1(IN_NONBLOCK);
>  	if (fd < 0) {
> -		fail("inotify_init failed");
> -		unlink(TFIL);
> -		exit(1);
> +		pr_perror("inotify_init failed");
> +		goto err;
>  	}
>  
> -	wd = inotify_add_watch(fd, TFIL, IN_OPEN);
> -	if (wd < 0) {
> -		fail("inotify_add_watch failed");
> -		unlink(TFIL);
> -		exit(1);
> +	for (i = 0; i < 2; i++) {
> +		wd = inotify_add_watch(fd, test_files[i], IN_OPEN);
> +		if (wd < 0) {
> +			pr_perror("inotify_add_watch failed");
> +			goto err;
> +		}
>  	}
>  
>  	test_daemon();
>  	test_waitsig();
>  
> -	memset(buf, 0, sizeof(buf));
> -	wd = open(TFIL, O_RDONLY);
> -	if (read(fd, buf, sizeof(buf)) <= 0) {
> -		unlink(TFIL);
> -		fail("No events in queue");
> -		exit(1);
> +	for (i = 0; i < 2; i++) {
> +		memset(buf, 0, sizeof(buf));
> +		wd = open(test_files[i], O_RDONLY);
> +		if (read(fd, buf, sizeof(buf)) <= 0) {
> +			fail("No events in queue");
> +			goto err;
> +		}
>  	}
>  
>  	close(wd);
>  	close(fd);
> -	unlink(TFIL);
> +	for (i = 0; i < 2; i++)
> +		unlink(test_files[i]);
>  	pass();
>  	return 0;
> +err:
> +	for (i = 0; i < 2; i++)
> +		unlink(test_files[i]);
> +	return 1;
>  }
> diff --git a/test/zdtm/static/inotify_irmap.desc b/test/zdtm/static/inotify_irmap.desc
> index 9c5994e..525a4a6 100644
> --- a/test/zdtm/static/inotify_irmap.desc
> +++ b/test/zdtm/static/inotify_irmap.desc
> @@ -1 +1 @@
> -{'flags': 'suid', 'opts' : '--force-irmap'}
> +{'flags': 'suid', 'opts' : '--force-irmap --irmap-scan-path /zdtm/static'}
> diff --git a/test/zdtm/static/inotify_irmap.hook b/test/zdtm/static/inotify_irmap.hook
> new file mode 100755
> index 0000000..eca6bfa
> --- /dev/null
> +++ b/test/zdtm/static/inotify_irmap.hook
> @@ -0,0 +1,18 @@
> +#!/bin/sh
> +
> +umask 0000
> +
> +[ "$1" == "--pre-restore" ] && {
> +	# emulate rsync
> +	rm -rf etc/zdtm-test
> +	touch etc/zdtm-test
> +}
> +
> +[ "$1" == "--post-pre-dump" ] && {
> +	echo 'invalidate the irmap cache'
> +	mv etc/zdtm-test etc/zdtm-test2
> +	mv etc/zdtm-test1 etc/zdtm-test
> +	mv etc/zdtm-test2 etc/zdtm-test1
> +}
> +
> +exit 0
> 



More information about the CRIU mailing list