Commit e7089bc3 authored by Mike Rapoport's avatar Mike Rapoport Committed by Pavel Emelyanov

criu: pagemap: drop put_pagemap

With in-memory pagemap put_pagemap is not required because it does not
frees any resources. Minor modifications to get_pagemap and init_pagemaps
allow proper bookkeeping without put_pagemap.
Signed-off-by: 's avatarMike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
parent b89ee40b
...@@ -83,22 +83,17 @@ static int cr_dedup_one_pagemap(int id, int flags) ...@@ -83,22 +83,17 @@ static int cr_dedup_one_pagemap(int id, int flags)
if (!prp) if (!prp)
goto exit; goto exit;
ret = pr.get_pagemap(&pr, &iov);
if (ret <= 0)
goto exit;
while (1) { while (1) {
ret = pr.get_pagemap(&pr, &iov);
if (ret <= 0)
goto exit;
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);
if (ret) if (ret)
goto exit; goto exit;
} }
pr.put_pagemap(&pr);
ret = pr.get_pagemap(&pr, &iov);
if (ret <= 0)
goto exit;
} }
exit: exit:
pr.close(&pr); pr.close(&pr);
......
...@@ -48,8 +48,6 @@ struct page_read { ...@@ -48,8 +48,6 @@ struct page_read {
int (*get_pagemap)(struct page_read *, struct iovec *iov); int (*get_pagemap)(struct page_read *, struct iovec *iov);
/* reads page from current pagemap */ /* reads page from current pagemap */
int (*read_pages)(struct page_read *, unsigned long vaddr, int nr, void *); int (*read_pages)(struct page_read *, unsigned long vaddr, int nr, void *);
/* stop working on current pagemap */
void (*put_pagemap)(struct page_read *);
void (*close)(struct page_read *); void (*close)(struct page_read *);
int (*seek_page)(struct page_read *pr, unsigned long vaddr, bool warn); int (*seek_page)(struct page_read *pr, unsigned long vaddr, bool warn);
......
...@@ -788,9 +788,6 @@ static int restore_priv_vma_content(struct pstree_item *t) ...@@ -788,9 +788,6 @@ static int restore_priv_vma_content(struct pstree_item *t)
} }
} }
if (pr.put_pagemap)
pr.put_pagemap(&pr);
} }
err_read: err_read:
......
...@@ -127,6 +127,7 @@ static int get_pagemap(struct page_read *pr, struct iovec *iov) ...@@ -127,6 +127,7 @@ static int get_pagemap(struct page_read *pr, struct iovec *iov)
{ {
PagemapEntry *pe; PagemapEntry *pe;
pr->curr_pme++;
if (pr->curr_pme >= pr->nr_pmes) if (pr->curr_pme >= pr->nr_pmes)
return 0; return 0;
...@@ -145,11 +146,6 @@ static int get_pagemap(struct page_read *pr, struct iovec *iov) ...@@ -145,11 +146,6 @@ static int get_pagemap(struct page_read *pr, struct iovec *iov)
return 1; return 1;
} }
static void put_pagemap(struct page_read *pr)
{
pr->curr_pme++;
}
static void skip_pagemap_pages(struct page_read *pr, unsigned long len) static void skip_pagemap_pages(struct page_read *pr, unsigned long len)
{ {
if (!len) if (!len)
...@@ -185,7 +181,6 @@ static int seek_pagemap_page(struct page_read *pr, unsigned long vaddr, ...@@ -185,7 +181,6 @@ static int seek_pagemap_page(struct page_read *pr, unsigned long vaddr,
if (iov_end <= vaddr) { if (iov_end <= vaddr) {
skip_pagemap_pages(pr, iov_end - pr->cvaddr); skip_pagemap_pages(pr, iov_end - pr->cvaddr);
put_pagemap(pr);
new_pagemap: new_pagemap:
ret = get_pagemap(pr, &iov); ret = get_pagemap(pr, &iov);
if (ret <= 0) if (ret <= 0)
...@@ -397,7 +392,8 @@ static int init_pagemaps(struct page_read *pr) ...@@ -397,7 +392,8 @@ static int init_pagemaps(struct page_read *pr)
if (!pr->pmes) if (!pr->pmes)
return -1; return -1;
pr->nr_pmes = pr->curr_pme = 0; pr->nr_pmes = 0;
pr->curr_pme = -1;
while (1) { while (1) {
int ret = pb_read_one_eof(pr->pmi, &pr->pmes[pr->nr_pmes], int ret = pb_read_one_eof(pr->pmi, &pr->pmes[pr->nr_pmes],
...@@ -485,7 +481,6 @@ int open_page_read_at(int dfd, int pid, struct page_read *pr, int pr_flags) ...@@ -485,7 +481,6 @@ int open_page_read_at(int dfd, int pid, struct page_read *pr, int pr_flags)
} }
pr->get_pagemap = get_pagemap; pr->get_pagemap = get_pagemap;
pr->put_pagemap = put_pagemap;
pr->read_pages = read_pagemap_page; pr->read_pages = read_pagemap_page;
pr->close = close_page_read; pr->close = close_page_read;
pr->seek_page = seek_pagemap_page; pr->seek_page = seek_pagemap_page;
......
...@@ -481,9 +481,6 @@ static int restore_shmem_content(void *addr, struct shmem_info *si) ...@@ -481,9 +481,6 @@ static int restore_shmem_content(void *addr, struct shmem_info *si)
break; break;
pr.read_pages(&pr, vaddr, nr_pages, addr + vaddr); pr.read_pages(&pr, vaddr, nr_pages, addr + vaddr);
if (pr.put_pagemap)
pr.put_pagemap(&pr);
} }
pr.close(&pr); pr.close(&pr);
......
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