Commit 8505a8cc authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by Andrei Vagin

pageserver: Merge page_server_add with page_server_hole

Do the same here, the flags is now enough to tell hole
from pagemap.
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
Acked-by: 's avatarMike Rapoport <rppt@linux.vnet.ibm.com>
parent 4ea4653c
...@@ -628,12 +628,11 @@ static int prep_loc_xfer(struct page_server_iov *pi) ...@@ -628,12 +628,11 @@ static int prep_loc_xfer(struct page_server_iov *pi)
return 0; return 0;
} }
static int page_server_add(int sk, struct page_server_iov *pi) static int page_server_add(int sk, struct page_server_iov *pi, u32 flags)
{ {
size_t len; size_t len;
struct page_xfer *lxfer = &cxfer.loc_xfer; struct page_xfer *lxfer = &cxfer.loc_xfer;
struct iovec iov; struct iovec iov;
u32 flags;
pr_debug("Adding %"PRIx64"/%u\n", pi->vaddr, pi->nr_pages); pr_debug("Adding %"PRIx64"/%u\n", pi->vaddr, pi->nr_pages);
...@@ -641,10 +640,12 @@ static int page_server_add(int sk, struct page_server_iov *pi) ...@@ -641,10 +640,12 @@ static int page_server_add(int sk, struct page_server_iov *pi)
return -1; return -1;
psi2iovec(pi, &iov); psi2iovec(pi, &iov);
flags = decode_ps_flags(pi->cmd);
if (lxfer->write_pagemap(lxfer, &iov, flags)) if (lxfer->write_pagemap(lxfer, &iov, flags))
return -1; return -1;
if (!(flags & PE_PRESENT))
return 0;
len = iov.iov_len; len = iov.iov_len;
while (len > 0) { while (len > 0) {
ssize_t chunk; ssize_t chunk;
...@@ -686,23 +687,6 @@ static int page_server_add(int sk, struct page_server_iov *pi) ...@@ -686,23 +687,6 @@ static int page_server_add(int sk, struct page_server_iov *pi)
return 0; return 0;
} }
static int page_server_hole(int sk, struct page_server_iov *pi, u32 flags)
{
struct page_xfer *lxfer = &cxfer.loc_xfer;
struct iovec iov;
pr_debug("Adding %"PRIx64"/%u hole\n", pi->vaddr, pi->nr_pages);
if (prep_loc_xfer(pi))
return -1;
psi2iovec(pi, &iov);
if (lxfer->write_pagemap(lxfer, &iov, flags))
return -1;
return 0;
}
static int page_server_get_pages(int sk, struct page_server_iov *pi) static int page_server_get_pages(int sk, struct page_server_iov *pi)
{ {
struct pstree_item *item; struct pstree_item *item;
...@@ -798,16 +782,16 @@ static int page_server_serve(int sk) ...@@ -798,16 +782,16 @@ static int page_server_serve(int sk)
ret = page_server_check_parent(sk, &pi); ret = page_server_check_parent(sk, &pi);
break; break;
case PS_IOV_ADD: case PS_IOV_ADD:
ret = page_server_add(sk, &pi); ret = page_server_add(sk, &pi, PE_PRESENT | decode_ps_flags(pi.cmd));
break; break;
case PS_IOV_HOLE: case PS_IOV_HOLE:
ret = page_server_hole(sk, &pi, PE_PARENT); ret = page_server_add(sk, &pi, PE_PARENT);
break; break;
case PS_IOV_ZERO: case PS_IOV_ZERO:
ret = page_server_hole(sk, &pi, PE_ZERO); ret = page_server_add(sk, &pi, PE_ZERO);
break; break;
case PS_IOV_LAZY: case PS_IOV_LAZY:
ret = page_server_hole(sk, &pi, PE_LAZY); ret = page_server_add(sk, &pi, PE_LAZY);
break; break;
case PS_IOV_FLUSH: case PS_IOV_FLUSH:
case PS_IOV_FLUSH_N_CLOSE: case PS_IOV_FLUSH_N_CLOSE:
......
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