[CRIU] [PATCHv3 14/30] page-xfer: dump compatible iovec

Dmitry Safonov dsafonov at virtuozzo.com
Tue Jul 5 04:47:04 PDT 2016


On 07/05/2016 02:35 PM, Pavel Emelyanov wrote:
>
>>>> ========================== Run zdtm/static/env00 in h ==========================
>>>> Start test
>>>> ./env00 --pidfile=env00.pid --outfile=env00.out --envname=ENV_00_TEST
>>>> Run criu pre-dump
>>>> Run criu pre-dump
>>>> Run criu dump
>>>> Run criu restore
>>>> =[log]=> dump/zdtm/static/env00/24/3/restore.log
>>>> ------------------------ grep Error ------------------------
>>>> (00.035223)     24: Error (mem.c:826): Page entry address 400000 outside of VMA 7fffddbcf000-7fffddbd1000
>>>> (00.035323) Error (cr-restore.c:1885): Restoring FAILED.
>>>> ------------------------ ERROR OVER ------------------------
>>>> ################# Test zdtm/static/env00 FAIL at CRIU restore ##################
>>>> ##################################### FAIL #####################################
>>>>
>>>> https://github.com/xemul/criu/issues/185
>>>
>>> The pagemap image for test becomes unsorted.
>>
>> Yes, thanks, I have reproduced and also found image unsorted.
>> Working on fix.
>
>
> diff --git a/criu/page-xfer.c b/criu/page-xfer.c
> index 8c2c799..967a587 100644
> --- a/criu/page-xfer.c
> +++ b/criu/page-xfer.c
> @@ -370,7 +370,7 @@ int page_xfer_dump_pages(struct page_xfer *xfer, struct page_pipe *pp,
>                                 struct iovec hole = get_iov(pp->holes, cur_hole,
>                                                 pp->compat_iov);
>
> -                               if (hole.iov_base < iov.iov_base)
> +                               if (hole.iov_base >= iov.iov_base)
>                                         break;
>                                 ret = page_xfer_dump_hole(xfer, &hole, off);
>                                 if (ret)
>
> Is it just like this?


And while we on it, don't you mind, if I change:
static struct iovec get_iov(...)
to this:
static struct iovec *get_iov(...)

And introduce put_iov(struct iovec *, bool compat)
to eleminate needless copy here.
On the moment of patch I wanted to return pointer to static
iovec_compat, but found the need in reentrancy, so left
coping here, but it's pretty annoing.


More information about the CRIU mailing list