Commit 3b995f1a authored by Pavel Emelyanov's avatar Pavel Emelyanov

iov: Add iovec2pagemap() helper

Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent cd347240
...@@ -71,6 +71,7 @@ struct page_read { ...@@ -71,6 +71,7 @@ struct page_read {
extern int open_page_read(int pid, struct page_read *, int flags, bool shmem); extern int open_page_read(int pid, struct page_read *, int flags, bool shmem);
extern int open_page_read_at(int dfd, int pid, struct page_read *pr, int flags, bool shmem); extern int open_page_read_at(int dfd, int pid, struct page_read *pr, int flags, bool shmem);
extern void pagemap2iovec(PagemapEntry *pe, struct iovec *iov); extern void pagemap2iovec(PagemapEntry *pe, struct iovec *iov);
extern void iovec2pagemap(struct iovec *iov, PagemapEntry *pe);
extern int seek_pagemap_page(struct page_read *pr, unsigned long vaddr, bool warn); extern int seek_pagemap_page(struct page_read *pr, unsigned long vaddr, bool warn);
extern int dedup_one_iovec(struct page_read *pr, struct iovec *iov); extern int dedup_one_iovec(struct page_read *pr, struct iovec *iov);
......
...@@ -49,6 +49,12 @@ void pagemap2iovec(PagemapEntry *pe, struct iovec *iov) ...@@ -49,6 +49,12 @@ void pagemap2iovec(PagemapEntry *pe, struct iovec *iov)
iov->iov_len = pe->nr_pages * PAGE_SIZE; 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 int get_pagemap(struct page_read *pr, struct iovec *iov) static int get_pagemap(struct page_read *pr, struct iovec *iov)
{ {
int ret; int ret;
......
...@@ -457,9 +457,7 @@ static int write_pagemap_loc(struct page_xfer *xfer, ...@@ -457,9 +457,7 @@ static int write_pagemap_loc(struct page_xfer *xfer,
int ret; int ret;
PagemapEntry pe = PAGEMAP_ENTRY__INIT; PagemapEntry pe = PAGEMAP_ENTRY__INIT;
pe.vaddr = encode_pointer(iov->iov_base); iovec2pagemap(iov, &pe);
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, iov); ret = dedup_one_iovec(xfer->parent, iov);
if (ret == -1) { if (ret == -1) {
...@@ -544,8 +542,7 @@ static int write_pagehole_loc(struct page_xfer *xfer, struct iovec *iov) ...@@ -544,8 +542,7 @@ static int write_pagehole_loc(struct page_xfer *xfer, struct iovec *iov)
} }
} }
pe.vaddr = encode_pointer(iov->iov_base); iovec2pagemap(iov, &pe);
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;
......
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