Commit 215d242a authored by Mike Rapoport's avatar Mike Rapoport Committed by Pavel Emelyanov

pagemap: drop pagemap2iovec and iovec2pagemap

The PagemapEntry and struct iovec are quite interchangeable.
PagemapEntry can be used directly in the few places that converted it to
struct iovec.
The only place that used iovec2pagemap can be switched to open-coded
assignments without really hurting code readability.

travis-ci: success for pagemap: minor cleanups (rev2)
Signed-off-by: 's avatarMike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
parent 094ba506
...@@ -72,7 +72,6 @@ static int cr_dedup_one_pagemap(int id, int flags) ...@@ -72,7 +72,6 @@ static int cr_dedup_one_pagemap(int id, int flags)
int ret; int ret;
struct page_read pr; struct page_read pr;
struct page_read * prp; struct page_read * prp;
struct iovec iov;
flags |= PR_MOD; flags |= PR_MOD;
ret = open_page_read(id, &pr, flags); ret = open_page_read(id, &pr, flags);
...@@ -88,8 +87,8 @@ static int cr_dedup_one_pagemap(int id, int flags) ...@@ -88,8 +87,8 @@ static int cr_dedup_one_pagemap(int id, int flags)
if (ret <= 0) if (ret <= 0)
goto exit; goto exit;
pagemap2iovec(pr.pe, &iov); pr_debug("dedup iovec base=%"PRIx64", len=%lu\n",
pr_debug("dedup iovec base=%p, len=%zu\n", iov.iov_base, iov.iov_len); pr.pe->vaddr, pagemap_len(pr.pe));
if (!pr.pe->in_parent) { if (!pr.pe->in_parent) {
ret = dedup_one_iovec(prp, pr.pe->vaddr, ret = dedup_one_iovec(prp, pr.pe->vaddr,
pagemap_len(pr.pe)); pagemap_len(pr.pe));
......
...@@ -93,8 +93,6 @@ struct page_read { ...@@ -93,8 +93,6 @@ struct page_read {
extern int open_page_read(int pid, struct page_read *, int pr_flags); extern int open_page_read(int pid, struct page_read *, int pr_flags);
extern int open_page_read_at(int dfd, int pid, struct page_read *pr, extern int open_page_read_at(int dfd, int pid, struct page_read *pr,
int pr_flags); int pr_flags);
extern void pagemap2iovec(PagemapEntry *pe, struct iovec *iov);
extern void iovec2pagemap(struct iovec *iov, PagemapEntry *pe);
extern int dedup_one_iovec(struct page_read *pr, unsigned long base, extern int dedup_one_iovec(struct page_read *pr, unsigned long base,
unsigned long len); unsigned long len);
......
...@@ -153,7 +153,8 @@ static int write_pagemap_loc(struct page_xfer *xfer, ...@@ -153,7 +153,8 @@ static int write_pagemap_loc(struct page_xfer *xfer,
int ret; int ret;
PagemapEntry pe = PAGEMAP_ENTRY__INIT; PagemapEntry pe = PAGEMAP_ENTRY__INIT;
iovec2pagemap(iov, &pe); pe.vaddr = encode_pointer(iov->iov_base);
pe.nr_pages = iov->iov_len / PAGE_SIZE;
if (opts.auto_dedup && xfer->parent != NULL) { if (opts.auto_dedup && xfer->parent != NULL) {
ret = dedup_one_iovec(xfer->parent, pe.vaddr, ret = dedup_one_iovec(xfer->parent, pe.vaddr,
pagemap_len(&pe)); pagemap_len(&pe));
...@@ -200,7 +201,6 @@ static int check_pagehole_in_parent(struct page_read *p, struct iovec *iov) ...@@ -200,7 +201,6 @@ static int check_pagehole_in_parent(struct page_read *p, struct iovec *iov)
off = (unsigned long)iov->iov_base; off = (unsigned long)iov->iov_base;
end = off + iov->iov_len; end = off + iov->iov_len;
while (1) { while (1) {
struct iovec piov;
unsigned long pend; unsigned long pend;
ret = p->seek_pagemap(p, off); ret = p->seek_pagemap(p, off);
...@@ -209,8 +209,7 @@ static int check_pagehole_in_parent(struct page_read *p, struct iovec *iov) ...@@ -209,8 +209,7 @@ static int check_pagehole_in_parent(struct page_read *p, struct iovec *iov)
return -1; return -1;
} }
pagemap2iovec(p->pe, &piov); pr_debug("\tFound %"PRIx64"/%lu\n", p->pe->vaddr, pagemap_len(p->pe));
pr_debug("\tFound %p/%zu\n", piov.iov_base, piov.iov_len);
/* /*
* The pagemap entry in parent may happen to be * The pagemap entry in parent may happen to be
...@@ -218,7 +217,7 @@ static int check_pagehole_in_parent(struct page_read *p, struct iovec *iov) ...@@ -218,7 +217,7 @@ static int check_pagehole_in_parent(struct page_read *p, struct iovec *iov)
* we should go ahead and check the remainder. * we should go ahead and check the remainder.
*/ */
pend = (unsigned long)piov.iov_base + piov.iov_len; pend = p->pe->vaddr + pagemap_len(p->pe);
if (end <= pend) if (end <= pend)
return 0; return 0;
...@@ -242,7 +241,8 @@ static int write_pagehole_loc(struct page_xfer *xfer, struct iovec *iov) ...@@ -242,7 +241,8 @@ static int write_pagehole_loc(struct page_xfer *xfer, struct iovec *iov)
} }
} }
iovec2pagemap(iov, &pe); pe.vaddr = encode_pointer(iov->iov_base);
pe.nr_pages = iov->iov_len / PAGE_SIZE;
pe.has_in_parent = true; pe.has_in_parent = true;
pe.in_parent = true; pe.in_parent = true;
......
...@@ -34,18 +34,6 @@ struct page_read_iov { ...@@ -34,18 +34,6 @@ struct page_read_iov {
struct list_head l; struct list_head l;
}; };
void pagemap2iovec(PagemapEntry *pe, struct iovec *iov)
{
iov->iov_base = decode_pointer(pe->vaddr);
iov->iov_len = pe->nr_pages * PAGE_SIZE;
}
void iovec2pagemap(struct iovec *iov, PagemapEntry *pe)
{
pe->vaddr = encode_pointer(iov->iov_base);
pe->nr_pages = iov->iov_len / PAGE_SIZE;
}
static inline bool can_extend_bunch(struct iovec *bunch, static inline bool can_extend_bunch(struct iovec *bunch,
unsigned long off, unsigned long len) unsigned long off, unsigned long len)
{ {
...@@ -84,16 +72,13 @@ static int punch_hole(struct page_read *pr, unsigned long off, ...@@ -84,16 +72,13 @@ static int punch_hole(struct page_read *pr, unsigned long off,
static int seek_pagemap_page(struct page_read *pr, unsigned long vaddr); static int seek_pagemap_page(struct page_read *pr, unsigned long vaddr);
int dedup_one_iovec(struct page_read *pr, unsigned long base, unsigned long len) int dedup_one_iovec(struct page_read *pr, unsigned long off, unsigned long len)
{ {
unsigned long off;
unsigned long iov_end; unsigned long iov_end;
iov_end = base + len; iov_end = off + len;
off = base;
while (1) { while (1) {
int ret; int ret;
struct iovec piov;
unsigned long piov_end; unsigned long piov_end;
struct page_read * prp; struct page_read * prp;
...@@ -108,8 +93,7 @@ int dedup_one_iovec(struct page_read *pr, unsigned long base, unsigned long len) ...@@ -108,8 +93,7 @@ int dedup_one_iovec(struct page_read *pr, unsigned long base, unsigned long len)
if (!pr->pe) if (!pr->pe)
return -1; return -1;
pagemap2iovec(pr->pe, &piov); piov_end = pr->pe->vaddr + pagemap_len(pr->pe);
piov_end = (unsigned long)piov.iov_base + piov.iov_len;
if (!pr->pe->in_parent) { if (!pr->pe->in_parent) {
ret = punch_hole(pr, pr->pi_off, min(piov_end, iov_end) - off, false); ret = punch_hole(pr, pr->pi_off, min(piov_end, iov_end) - off, false);
if (ret == -1) if (ret == -1)
......
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