Commit 687c3894 authored by Pavel Emelyanov's avatar Pavel Emelyanov

iov: Add page_server_iov to iov and back helpers

Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 3b995f1a
...@@ -21,6 +21,18 @@ struct page_server_iov { ...@@ -21,6 +21,18 @@ struct page_server_iov {
u64 dst_id; u64 dst_id;
}; };
static void psi2iovec(struct page_server_iov *ps, struct iovec *iov)
{
iov->iov_base = decode_pointer(ps->vaddr);
iov->iov_len = ps->nr_pages * PAGE_SIZE;
}
static void iovec2psi(struct iovec *iov, struct page_server_iov *ps)
{
ps->vaddr = encode_pointer(iov->iov_base);
ps->nr_pages = iov->iov_len / PAGE_SIZE;
}
static int open_page_local_xfer(struct page_xfer *xfer, int fd_type, long id); static int open_page_local_xfer(struct page_xfer *xfer, int fd_type, long id);
#define PS_IOV_ADD 1 #define PS_IOV_ADD 1
...@@ -102,9 +114,7 @@ static int page_server_add(int sk, struct page_server_iov *pi) ...@@ -102,9 +114,7 @@ static int page_server_add(int sk, struct page_server_iov *pi)
if (prep_loc_xfer(pi)) if (prep_loc_xfer(pi))
return -1; return -1;
iov.iov_base = decode_pointer(pi->vaddr); psi2iovec(pi, &iov);
iov.iov_len = pi->nr_pages * PAGE_SIZE;
if (lxfer->write_pagemap(lxfer, &iov)) if (lxfer->write_pagemap(lxfer, &iov))
return -1; return -1;
...@@ -141,9 +151,7 @@ static int page_server_hole(int sk, struct page_server_iov *pi) ...@@ -141,9 +151,7 @@ static int page_server_hole(int sk, struct page_server_iov *pi)
if (prep_loc_xfer(pi)) if (prep_loc_xfer(pi))
return -1; return -1;
iov.iov_base = decode_pointer(pi->vaddr); psi2iovec(pi, &iov);
iov.iov_len = pi->nr_pages * PAGE_SIZE;
if (lxfer->write_hole(lxfer, &iov)) if (lxfer->write_hole(lxfer, &iov))
return -1; return -1;
...@@ -381,8 +389,7 @@ static int write_pagemap_to_server(struct page_xfer *xfer, ...@@ -381,8 +389,7 @@ static int write_pagemap_to_server(struct page_xfer *xfer,
pi.cmd = PS_IOV_ADD; pi.cmd = PS_IOV_ADD;
pi.dst_id = xfer->dst_id; pi.dst_id = xfer->dst_id;
pi.vaddr = encode_pointer(iov->iov_base); iovec2psi(iov, &pi);
pi.nr_pages = iov->iov_len / PAGE_SIZE;
if (write(xfer->fd, &pi, sizeof(pi)) != sizeof(pi)) { if (write(xfer->fd, &pi, sizeof(pi)) != sizeof(pi)) {
pr_perror("Can't write pagemap to server"); pr_perror("Can't write pagemap to server");
...@@ -411,8 +418,7 @@ static int write_hole_to_server(struct page_xfer *xfer, struct iovec *iov) ...@@ -411,8 +418,7 @@ static int write_hole_to_server(struct page_xfer *xfer, struct iovec *iov)
pi.cmd = PS_IOV_HOLE; pi.cmd = PS_IOV_HOLE;
pi.dst_id = xfer->dst_id; pi.dst_id = xfer->dst_id;
pi.vaddr = encode_pointer(iov->iov_base); iovec2psi(iov, &pi);
pi.nr_pages = iov->iov_len / PAGE_SIZE;
if (write(xfer->fd, &pi, sizeof(pi)) != sizeof(pi)) { if (write(xfer->fd, &pi, sizeof(pi)) != sizeof(pi)) {
pr_perror("Can't write pagehole to server"); pr_perror("Can't write pagehole to server");
......
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