[CRIU] [PATCH] page-xfer: repair bug with check_pagehole_in_parent
Pavel Emelyanov
xemul at parallels.com
Fri Apr 18 03:00:25 PDT 2014
On 04/18/2014 01:50 PM, Tikhomirov Pavel wrote:
> 1)it didn't find real pages it had only one step into iterative snapshots
> but what if real page is on the third level?
>
> patch adds recoursive check in previous images
>
> 2)it did provide whole intersected pagemap, but it will be more
> convinient to print only intersection part.
Was this all was caught by zdtm? If no, then it's worth creating
a stress test on stackable images. Would you?
> Signed-off-by: Tikhomirov Pavel <snorcht at gmail.com>
> ---
> page-xfer.c | 18 +++++++++++++++---
> 1 file changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/page-xfer.c b/page-xfer.c
> index 56e8575..0678b54 100644
> --- a/page-xfer.c
> +++ b/page-xfer.c
> @@ -504,7 +504,7 @@ static int check_pagehole_in_parent(struct page_read *p, struct iovec *iov)
> off = (unsigned long)iov->iov_base;
> end = off + iov->iov_len;
> while (1) {
> - struct iovec piov;
> + struct iovec piov, tiov;
> unsigned long pend;
>
> ret = seek_pagemap_page(p, off, true);
> @@ -512,7 +512,20 @@ static int check_pagehole_in_parent(struct page_read *p, struct iovec *iov)
> return -1;
>
> pagemap2iovec(p->pe, &piov);
> - pr_debug("\tFound %p/%zu\n", piov.iov_base, piov.iov_len);
> + pend = (unsigned long)piov.iov_base + piov.iov_len;
> +
> + tiov.iov_base = (void*)off;
> + tiov.iov_len = min(pend, end) - off;
> + if (!p->pe->in_parent) {
> + pr_debug("\tFound %p/%zu\n", tiov.iov_base, tiov.iov_len);
> + } else {
> + if (p->parent)
> + check_pagehole_in_parent(p->parent, &tiov);
> + else {
> + pr_err("No parent, though pagemap is in_parent");
> + return -1;
> + }
> + }
>
> /*
> * The pagemap entry in parent may heppen to be
> @@ -520,7 +533,6 @@ static int check_pagehole_in_parent(struct page_read *p, struct iovec *iov)
> * we should go ahead and check the remainder.
> */
>
> - pend = (unsigned long)piov.iov_base + piov.iov_len;
> if (end <= pend)
> return 0;
>
>
More information about the CRIU
mailing list