[CRIU] [PATCH] pagemap: fix reading pages from socket for --remote case

Andrei Vagin avagin at virtuozzo.com
Fri Apr 21 20:50:39 PDT 2017


On Fri, Apr 21, 2017 at 08:42:44PM -0700, Andrei Vagin wrote:
> Rodrigo, could you review this patch?

And there are other problems:

[root at fc24 criu]# python test/zdtm.py run --remote -t zdtm/static/env00 -f ns
=== Run 1/1 ================ zdtm/static/env00

========================= Run zdtm/static/env00 in ns ==========================
make[1]: Nothing to be done for 'default'.
Start test
make[1]: Nothing to be done for 'default'.
./env00 --pidfile=env00.pid --outfile=env00.out --envname=ENV_00_TEST
Adding image cache
Adding image proxy
Run criu dump
Run criu restore
=[log]=> dump/zdtm/static/env00/29/1/restore.log
------------------------ grep Error ------------------------
RTNETLINK answers: File exists
(00.229999)      1: do_open_remote_image RDONLY path=route-9.img snapshot_id=dump/zdtm/static/env00/29/1
(00.230344)      1: 	Running ip route restore
Failed to restore: ftell: Illegal seek
(00.233615)      1: Error (criu/util.c:712): exited, status=255
(00.233662)      1: Error (criu/net.c:1479): IP tool failed on route restore
(00.233695)      1: Error (criu/net.c:2153): Can't create net_ns
(00.258027) Error (criu/cr-restore.c:1130): 105 killed by signal 9: Killed
(00.258139) Error (criu/mount.c:2960): mnt: Can't remove the directory /tmp/.criu.mntns.s9sRwU: No such file or directory
(00.258203) Error (criu/cr-restore.c:2059): Restoring FAILED.
------------------------ ERROR OVER ------------------------
################# Test zdtm/static/env00 FAIL at CRIU restore ##################


> 
> On Fri, Apr 21, 2017 at 06:25:54PM +0300, Mike Rapoport wrote:
> > When --remote option is specified, read_local_page tries to pread from a
> > socket, and fails with "Illegal seek" error.
> > Restore single pread call for regular image files case and use read syscall
> > instead of pread for the --remote case.
> > 
> > Signed-off-by: Mike Rapoport <rppt at linux.vnet.ibm.com>
> > ---
> >  criu/pagemap.c | 18 +++++++++++++-----
> >  1 file changed, 13 insertions(+), 5 deletions(-)
> > 
> > diff --git a/criu/pagemap.c b/criu/pagemap.c
> > index 6c741b4..7d25c6f 100644
> > --- a/criu/pagemap.c
> > +++ b/criu/pagemap.c
> > @@ -265,15 +265,23 @@ static int read_local_page(struct page_read *pr, unsigned long vaddr,
> >  		return -1;
> >  
> >  	pr_debug("\tpr%d-%u Read page from self %lx/%"PRIx64"\n", pr->pid, pr->id, pr->cvaddr, pr->pi_off);
> > -	while (1) {
> > +	if (!opts.remote) {
> >  		ret = pread(fd, buf + curr, len - curr, pr->pi_off + curr);
> > -		if (ret < 1) {
> > +		if (ret != len) {
> >  			pr_perror("Can't read mapping page %d", ret);
> >  			return -1;
> >  		}
> > -		curr += ret;
> > -		if (curr == len)
> > -			break;
> > +	} else {
> > +		while (1) {
> > +			ret = read(fd, buf + curr, len - curr);
> > +			if (ret < 0) {
> > +				pr_perror("Can't read mapping page %d", ret);
> > +				return -1;
> > +			}
> > +			curr += ret;
> > +			if (curr == len)
> > +				break;
> > +		}
> >  	}
> >  
> >  	if (opts.auto_dedup) {
> > -- 
> > 1.9.1
> > 
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu


More information about the CRIU mailing list