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)
goto exit;
while (1) {
ret = pr.get_pagemap(&pr, &iov);
ret = pr.get_pagemap(&pr);
if (ret <= 0)
goto exit;
pagemap2iovec(pr.pe, &iov);
pr_debug("dedup iovec base=%p, len=%zu\n", iov.iov_base, iov.iov_len);
if (!pr.pe->in_parent) {
ret = dedup_one_iovec(prp, &iov);
......
......@@ -46,7 +46,7 @@ struct page_read {
* Gets next vaddr:len pair to work on. The zero pagemaps are skipped.
* 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 */
int (*read_pages)(struct page_read *, unsigned long vaddr, int nr,
void *, unsigned flags);
......
......@@ -704,14 +704,13 @@ static int restore_priv_vma_content(struct pstree_item *t)
*/
while (1) {
unsigned long off, i, nr_pages;
struct iovec iov;
ret = pr.get_pagemap(&pr, &iov);
ret = pr.get_pagemap(&pr);
if (ret <= 0)
break;
va = (unsigned long)iov.iov_base;
nr_pages = iov.iov_len / PAGE_SIZE;
va = (unsigned long)decode_pointer(pr.pe->vaddr);
nr_pages = pr.pe->nr_pages;
for (i = 0; i < nr_pages; i++) {
unsigned char buf[PAGE_SIZE];
......
......@@ -149,7 +149,7 @@ static int advance(struct page_read *pr)
return 1;
}
static int get_pagemap(struct page_read *pr, struct iovec *iov)
static int get_pagemap(struct page_read *pr)
{
if (!advance(pr))
return 0;
......@@ -159,8 +159,6 @@ static int get_pagemap(struct page_read *pr, struct iovec *iov)
return -1;
}
pagemap2iovec(pr->pe, iov);
return 1;
}
......
......@@ -19,6 +19,7 @@
#include "syscall-codes.h"
#include "bitops.h"
#include "log.h"
#include "types.h"
#include "page.h"
#include "util.h"
#include "protobuf.h"
......@@ -468,14 +469,13 @@ static int restore_shmem_content(void *addr, struct shmem_info *si)
while (1) {
unsigned long vaddr;
unsigned nr_pages;
struct iovec iov;
ret = pr.get_pagemap(&pr, &iov);
ret = pr.get_pagemap(&pr);
if (ret <= 0)
break;
vaddr = (unsigned long)iov.iov_base;
nr_pages = iov.iov_len / PAGE_SIZE;
vaddr = (unsigned long)decode_pointer(pr.pe->vaddr);
nr_pages = pr.pe->nr_pages;
if (vaddr + nr_pages * PAGE_SIZE > si->size)
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