Commit 84f22ae1 authored by Pavel Emelyanov's avatar Pavel Emelyanov

page-read: Remove iov from get_pagemap

We have pr->pe with the same data available widely, no need
to copy this thing twice.
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
Acked-by: 's avatarMike Rapoport <rppt@linux.vnet.ibm.com>
parent 75b4aae5
...@@ -84,10 +84,11 @@ static int cr_dedup_one_pagemap(int id, int flags) ...@@ -84,10 +84,11 @@ static int cr_dedup_one_pagemap(int id, int flags)
goto exit; goto exit;
while (1) { while (1) {
ret = pr.get_pagemap(&pr, &iov); ret = pr.get_pagemap(&pr);
if (ret <= 0) if (ret <= 0)
goto exit; goto exit;
pagemap2iovec(pr.pe, &iov);
pr_debug("dedup iovec base=%p, len=%zu\n", iov.iov_base, iov.iov_len); pr_debug("dedup iovec base=%p, len=%zu\n", iov.iov_base, iov.iov_len);
if (!pr.pe->in_parent) { if (!pr.pe->in_parent) {
ret = dedup_one_iovec(prp, &iov); ret = dedup_one_iovec(prp, &iov);
......
...@@ -46,7 +46,7 @@ struct page_read { ...@@ -46,7 +46,7 @@ struct page_read {
* Gets next vaddr:len pair to work on. The zero pagemaps are skipped. * Gets next vaddr:len pair to work on. The zero pagemaps are skipped.
* Pagemap entries should be returned in sorted order. * Pagemap entries should be returned in sorted order.
*/ */
int (*get_pagemap)(struct page_read *, struct iovec *iov); int (*get_pagemap)(struct page_read *);
/* reads page from current pagemap */ /* reads page from current pagemap */
int (*read_pages)(struct page_read *, unsigned long vaddr, int nr, int (*read_pages)(struct page_read *, unsigned long vaddr, int nr,
void *, unsigned flags); void *, unsigned flags);
......
...@@ -704,14 +704,13 @@ static int restore_priv_vma_content(struct pstree_item *t) ...@@ -704,14 +704,13 @@ static int restore_priv_vma_content(struct pstree_item *t)
*/ */
while (1) { while (1) {
unsigned long off, i, nr_pages; unsigned long off, i, nr_pages;
struct iovec iov;
ret = pr.get_pagemap(&pr, &iov); ret = pr.get_pagemap(&pr);
if (ret <= 0) if (ret <= 0)
break; break;
va = (unsigned long)iov.iov_base; va = (unsigned long)decode_pointer(pr.pe->vaddr);
nr_pages = iov.iov_len / PAGE_SIZE; nr_pages = pr.pe->nr_pages;
for (i = 0; i < nr_pages; i++) { for (i = 0; i < nr_pages; i++) {
unsigned char buf[PAGE_SIZE]; unsigned char buf[PAGE_SIZE];
......
...@@ -149,7 +149,7 @@ static int advance(struct page_read *pr) ...@@ -149,7 +149,7 @@ static int advance(struct page_read *pr)
return 1; return 1;
} }
static int get_pagemap(struct page_read *pr, struct iovec *iov) static int get_pagemap(struct page_read *pr)
{ {
if (!advance(pr)) if (!advance(pr))
return 0; return 0;
...@@ -159,8 +159,6 @@ static int get_pagemap(struct page_read *pr, struct iovec *iov) ...@@ -159,8 +159,6 @@ static int get_pagemap(struct page_read *pr, struct iovec *iov)
return -1; return -1;
} }
pagemap2iovec(pr->pe, iov);
return 1; return 1;
} }
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include "syscall-codes.h" #include "syscall-codes.h"
#include "bitops.h" #include "bitops.h"
#include "log.h" #include "log.h"
#include "types.h"
#include "page.h" #include "page.h"
#include "util.h" #include "util.h"
#include "protobuf.h" #include "protobuf.h"
...@@ -468,14 +469,13 @@ static int restore_shmem_content(void *addr, struct shmem_info *si) ...@@ -468,14 +469,13 @@ static int restore_shmem_content(void *addr, struct shmem_info *si)
while (1) { while (1) {
unsigned long vaddr; unsigned long vaddr;
unsigned nr_pages; unsigned nr_pages;
struct iovec iov;
ret = pr.get_pagemap(&pr, &iov); ret = pr.get_pagemap(&pr);
if (ret <= 0) if (ret <= 0)
break; break;
vaddr = (unsigned long)iov.iov_base; vaddr = (unsigned long)decode_pointer(pr.pe->vaddr);
nr_pages = iov.iov_len / PAGE_SIZE; nr_pages = pr.pe->nr_pages;
if (vaddr + nr_pages * PAGE_SIZE > si->size) if (vaddr + nr_pages * PAGE_SIZE > si->size)
break; break;
......
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