Commit daf8b4f7 authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by Andrei Vagin

page-xfer: Move lazy bool on xfer

Same thing for the boolean value saying whether or not to send
lazy pagemaps alone or follow them with the respective pages.
This value is non-true in the single place, so let's simplify
the API and keep this bool on xfer object.
Acked-by: 's avatarMike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: 's avatarAndrei Vagin <avagin@virtuozzo.com>
parent 121f07a7
...@@ -1491,7 +1491,7 @@ static int cr_pre_dump_finish(int ret) ...@@ -1491,7 +1491,7 @@ static int cr_pre_dump_finish(int ret)
goto err; goto err;
mem_pp = dmpi(item)->mem_pp; mem_pp = dmpi(item)->mem_pp;
ret = page_xfer_dump_pages(&xfer, mem_pp, true); ret = page_xfer_dump_pages(&xfer, mem_pp);
xfer.close(&xfer); xfer.close(&xfer);
......
...@@ -22,6 +22,7 @@ struct page_xfer { ...@@ -22,6 +22,7 @@ struct page_xfer {
* relative to some address. Used, e.g. by shmem. * relative to some address. Used, e.g. by shmem.
*/ */
unsigned long offset; unsigned long offset;
bool transfer_lazy;
/* private data for every page-xfer engine */ /* private data for every page-xfer engine */
union { union {
...@@ -41,7 +42,7 @@ struct page_xfer { ...@@ -41,7 +42,7 @@ struct page_xfer {
extern int open_page_xfer(struct page_xfer *xfer, int fd_type, long id); extern int open_page_xfer(struct page_xfer *xfer, int fd_type, long id);
struct page_pipe; struct page_pipe;
extern int page_xfer_dump_pages(struct page_xfer *, struct page_pipe *, bool dump_lazy); extern int page_xfer_dump_pages(struct page_xfer *, struct page_pipe *);
extern int connect_to_page_server_to_send(void); extern int connect_to_page_server_to_send(void);
extern int connect_to_page_server_to_recv(int epfd); extern int connect_to_page_server_to_recv(int epfd);
extern int disconnect_from_page_server(void); extern int disconnect_from_page_server(void);
......
...@@ -275,7 +275,7 @@ static int drain_pages(struct page_pipe *pp, struct parasite_ctl *ctl, ...@@ -275,7 +275,7 @@ static int drain_pages(struct page_pipe *pp, struct parasite_ctl *ctl,
return 0; return 0;
} }
static int xfer_pages(struct page_pipe *pp, struct page_xfer *xfer, bool lazy) static int xfer_pages(struct page_pipe *pp, struct page_xfer *xfer)
{ {
int ret; int ret;
...@@ -284,7 +284,7 @@ static int xfer_pages(struct page_pipe *pp, struct page_xfer *xfer, bool lazy) ...@@ -284,7 +284,7 @@ static int xfer_pages(struct page_pipe *pp, struct page_xfer *xfer, bool lazy)
* pre-dump action (see pre_dump_one_task) * pre-dump action (see pre_dump_one_task)
*/ */
timing_start(TIME_MEMWRITE); timing_start(TIME_MEMWRITE);
ret = page_xfer_dump_pages(xfer, pp, !lazy); ret = page_xfer_dump_pages(xfer, pp);
timing_stop(TIME_MEMWRITE); timing_stop(TIME_MEMWRITE);
return ret; return ret;
...@@ -346,6 +346,8 @@ static int __parasite_dump_pages_seized(struct pstree_item *item, ...@@ -346,6 +346,8 @@ static int __parasite_dump_pages_seized(struct pstree_item *item,
ret = open_page_xfer(&xfer, CR_FD_PAGEMAP, vpid(item)); ret = open_page_xfer(&xfer, CR_FD_PAGEMAP, vpid(item));
if (ret < 0) if (ret < 0)
goto out_pp; goto out_pp;
xfer.transfer_lazy = !mdc->lazy;
} else { } else {
ret = check_parent_page_xfer(CR_FD_PAGEMAP, vpid(item)); ret = check_parent_page_xfer(CR_FD_PAGEMAP, vpid(item));
if (ret < 0) if (ret < 0)
...@@ -387,7 +389,7 @@ again: ...@@ -387,7 +389,7 @@ again:
ret = drain_pages(pp, ctl, args); ret = drain_pages(pp, ctl, args);
if (!ret) if (!ret)
ret = xfer_pages(pp, &xfer, mdc->lazy /* false actually */); ret = xfer_pages(pp, &xfer);
if (!ret) { if (!ret) {
page_pipe_reinit(pp); page_pipe_reinit(pp);
goto again; goto again;
...@@ -403,7 +405,7 @@ again: ...@@ -403,7 +405,7 @@ again:
sizeof(struct iovec) * pp->nr_iovs); sizeof(struct iovec) * pp->nr_iovs);
ret = drain_pages(pp, ctl, args); ret = drain_pages(pp, ctl, args);
if (!ret && !mdc->pre_dump) if (!ret && !mdc->pre_dump)
ret = xfer_pages(pp, &xfer, mdc->lazy); ret = xfer_pages(pp, &xfer);
if (ret) if (ret)
goto out_xfer; goto out_xfer;
......
...@@ -379,6 +379,7 @@ out: ...@@ -379,6 +379,7 @@ out:
int open_page_xfer(struct page_xfer *xfer, int fd_type, long id) int open_page_xfer(struct page_xfer *xfer, int fd_type, long id)
{ {
xfer->offset = 0; xfer->offset = 0;
xfer->transfer_lazy = true;
if (opts.use_page_server) if (opts.use_page_server)
return open_page_server_xfer(xfer, fd_type, id); return open_page_server_xfer(xfer, fd_type, id);
...@@ -433,8 +434,7 @@ static int dump_holes(struct page_xfer *xfer, struct page_pipe *pp, ...@@ -433,8 +434,7 @@ static int dump_holes(struct page_xfer *xfer, struct page_pipe *pp,
return 0; return 0;
} }
int page_xfer_dump_pages(struct page_xfer *xfer, struct page_pipe *pp, int page_xfer_dump_pages(struct page_xfer *xfer, struct page_pipe *pp)
bool dump_lazy)
{ {
struct page_pipe_buf *ppb; struct page_pipe_buf *ppb;
unsigned int cur_hole = 0; unsigned int cur_hole = 0;
...@@ -461,7 +461,7 @@ int page_xfer_dump_pages(struct page_xfer *xfer, struct page_pipe *pp, ...@@ -461,7 +461,7 @@ int page_xfer_dump_pages(struct page_xfer *xfer, struct page_pipe *pp,
(unsigned int)(iov.iov_len / PAGE_SIZE)); (unsigned int)(iov.iov_len / PAGE_SIZE));
if (ppb->flags & PPB_LAZY) { if (ppb->flags & PPB_LAZY) {
if (!dump_lazy) { if (!xfer->transfer_lazy) {
if (xfer->write_pagemap(xfer, &iov, PE_LAZY)) if (xfer->write_pagemap(xfer, &iov, PE_LAZY))
return -1; return -1;
continue; continue;
......
...@@ -640,7 +640,7 @@ static int dump_pages(struct page_pipe *pp, struct page_xfer *xfer) ...@@ -640,7 +640,7 @@ static int dump_pages(struct page_pipe *pp, struct page_xfer *xfer)
return -1; return -1;
} }
return page_xfer_dump_pages(xfer, pp, true); return page_xfer_dump_pages(xfer, pp);
} }
static int next_data_segment(int fd, unsigned long pfn, static int next_data_segment(int fd, unsigned long pfn,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment