[CRIU] [PATCH 12/12] page-xfer: Sanitize xfer core routine
Mike Rapoport
rppt at linux.vnet.ibm.com
Wed Jun 28 19:28:00 MSK 2017
On Wed, Jun 28, 2017 at 04:48:45PM +0300, Pavel Emelyanov wrote:
> Make it call .write_pagemap once and decide whether or not to
> call .write_pages based on the flags caluculated in one place
> as well.
>
> Signed-off-by: Pavel Emelyanov <xemul at virtuozzo.com>
> ---
> criu/page-xfer.c | 23 ++++++++++++-----------
> 1 file changed, 12 insertions(+), 11 deletions(-)
>
> diff --git a/criu/page-xfer.c b/criu/page-xfer.c
> index 10da75f..256cac6 100644
> --- a/criu/page-xfer.c
> +++ b/criu/page-xfer.c
> @@ -405,6 +405,14 @@ static int dump_holes(struct page_xfer *xfer, struct page_pipe *pp,
> return 0;
> }
>
> +static inline u32 ppb_xfer_flags(struct page_xfer *xfer, struct page_pipe_buf *ppb)
> +{
> + if (ppb->flags & PPB_LAZY)
> + return PE_LAZY | (xfer->transfer_lazy ? PE_PRESENT : 0);
Huh. Then maybe even
return ppb->flags & PPB_LAZY ? PE_LAZY | (xfer->transfer_lazy ? PE_PRESENT : 0) : PE_PRESENT;
;-)
I understand that if's and braces are not Spartan enough, but can we at
least switch the order:
return (xfer->transfer_lazy ? PE_PRESENT : 0) | PE_LAZY;
and add a comment, e.g.:
/*
* Pages that can be lazily restored are always marked as such. In
* the case we actually transfer them into image make them as
* present as well.
*/
> + else
> + return PE_PRESENT;
> +}
> +
> int page_xfer_dump_pages(struct page_xfer *xfer, struct page_pipe *pp)
> {
> struct page_pipe_buf *ppb;
> @@ -420,7 +428,7 @@ int page_xfer_dump_pages(struct page_xfer *xfer, struct page_pipe *pp)
>
> for (i = 0; i < ppb->nr_segs; i++) {
> struct iovec iov = ppb->iov[i];
> - u32 flags = PE_PRESENT;
> + u32 flags;
>
> ret = dump_holes(xfer, pp, &cur_hole, iov.iov_base);
> if (ret)
> @@ -431,19 +439,12 @@ int page_xfer_dump_pages(struct page_xfer *xfer, struct page_pipe *pp)
> pr_debug("\tp %p [%u]\n", iov.iov_base,
> (unsigned int)(iov.iov_len / PAGE_SIZE));
>
> - if (ppb->flags & PPB_LAZY) {
> - if (!xfer->transfer_lazy) {
> - if (xfer->write_pagemap(xfer, &iov, PE_LAZY))
> - return -1;
> - continue;
> - } else {
> - flags |= PE_LAZY;
> - }
> - }
> + flags = ppb_xfer_flags(xfer, ppb);
>
> if (xfer->write_pagemap(xfer, &iov, flags))
> return -1;
> - if (xfer->write_pages(xfer, ppb->p[0], iov.iov_len))
> + if ((flags & PE_PRESENT) && xfer->write_pages(xfer,
> + ppb->p[0], iov.iov_len))
Huh again. A newline after && ?
> return -1;
> }
> }
> --
> 2.1.4
>
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
>
More information about the CRIU
mailing list