Commit 8edb68e9 authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by Andrei Vagin

uffd: Hide page server socket back

With epoll helpers in util we can stop exposing the
page-server socket to the oter world.

travis-ci: success for Some more cleanups over uffd.c (rev3)
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
Acked-by: 's avatarMike Rapoport <rppt@linux.vnet.ibm.com>
parent 4cb743e4
...@@ -1565,7 +1565,7 @@ int cr_pre_dump_tasks(pid_t pid) ...@@ -1565,7 +1565,7 @@ int cr_pre_dump_tasks(pid_t pid)
if (vdso_init()) if (vdso_init())
goto err; goto err;
if (connect_to_page_server() < 0) if (connect_to_page_server_to_send() < 0)
goto err; goto err;
if (setup_alarm_handler()) if (setup_alarm_handler())
...@@ -1761,7 +1761,7 @@ int cr_dump_tasks(pid_t pid) ...@@ -1761,7 +1761,7 @@ int cr_dump_tasks(pid_t pid)
goto err; goto err;
} }
if (connect_to_page_server() < 0) if (connect_to_page_server_to_send() < 0)
goto err; goto err;
if (setup_alarm_handler()) if (setup_alarm_handler())
......
...@@ -37,7 +37,8 @@ extern int open_page_xfer(struct page_xfer *xfer, int fd_type, long id); ...@@ -37,7 +37,8 @@ extern int open_page_xfer(struct page_xfer *xfer, int fd_type, long id);
struct page_pipe; struct page_pipe;
extern int page_xfer_dump_pages(struct page_xfer *, struct page_pipe *, extern int page_xfer_dump_pages(struct page_xfer *, struct page_pipe *,
unsigned long off, bool dump_lazy); unsigned long off, bool dump_lazy);
extern int connect_to_page_server(void); extern int connect_to_page_server_to_send(void);
extern int connect_to_page_server_to_recv(int epfd);
extern int disconnect_from_page_server(void); extern int disconnect_from_page_server(void);
extern int check_parent_page_xfer(int fd_type, long id); extern int check_parent_page_xfer(int fd_type, long id);
...@@ -60,6 +61,5 @@ extern int receive_remote_pages(int len, void *buf); ...@@ -60,6 +61,5 @@ extern int receive_remote_pages(int len, void *buf);
typedef int (*ps_async_read_complete)(int pid, unsigned long vaddr, int nr_pages, void *); typedef int (*ps_async_read_complete)(int pid, unsigned long vaddr, int nr_pages, void *);
extern int page_server_start_async_read(void *buf, int nr_pages, extern int page_server_start_async_read(void *buf, int nr_pages,
ps_async_read_complete complete, void *priv); ps_async_read_complete complete, void *priv);
extern int page_server_async_read(void);
#endif /* __CR_PAGE_XFER__H__ */ #endif /* __CR_PAGE_XFER__H__ */
...@@ -885,7 +885,7 @@ no_server: ...@@ -885,7 +885,7 @@ no_server:
return ret; return ret;
} }
int connect_to_page_server(void) static int connect_to_page_server(void)
{ {
if (!opts.use_page_server) if (!opts.use_page_server)
return 0; return 0;
...@@ -906,7 +906,12 @@ out: ...@@ -906,7 +906,12 @@ out:
* on urgent data is the smartest mode ever. * on urgent data is the smartest mode ever.
*/ */
tcp_cork(page_server_sk, true); tcp_cork(page_server_sk, true);
return page_server_sk; return 0;
}
int connect_to_page_server_to_send(void)
{
return connect_to_page_server();
} }
int disconnect_from_page_server(void) int disconnect_from_page_server(void)
...@@ -993,7 +998,7 @@ int page_server_start_async_read(void *buf, int nr_pages, ...@@ -993,7 +998,7 @@ int page_server_start_async_read(void *buf, int nr_pages,
* for sure the next time socket event will occur we'll get page data * for sure the next time socket event will occur we'll get page data
* related to info we've just received * related to info we've just received
*/ */
int page_server_async_read(void) static int page_server_async_read(struct epoll_rfd *f)
{ {
struct ps_async_read *ar; struct ps_async_read *ar;
int ret, need; int ret, need;
...@@ -1035,6 +1040,19 @@ int page_server_async_read(void) ...@@ -1035,6 +1040,19 @@ int page_server_async_read(void)
return ret; return ret;
} }
static struct epoll_rfd ps_rfd;
int connect_to_page_server_to_recv(int epfd)
{
if (connect_to_page_server())
return -1;
ps_rfd.fd = page_server_sk;
ps_rfd.revent = page_server_async_read;
return epoll_add_rfd(epfd, &ps_rfd);
}
int request_remote_pages(int pid, unsigned long addr, int nr_pages) int request_remote_pages(int pid, unsigned long addr, int nr_pages)
{ {
struct page_server_iov pi = { struct page_server_iov pi = {
......
...@@ -805,27 +805,6 @@ close_uffd: ...@@ -805,27 +805,6 @@ close_uffd:
return -1; return -1;
} }
static int page_server_event(struct epoll_rfd *lpfd)
{
return page_server_async_read();
}
static struct epoll_rfd page_server_sk_fd;
static int prepare_page_server_socket(int epollfd)
{
int sk;
sk = connect_to_page_server();
if (sk < 0)
return -1;
page_server_sk_fd.revent = page_server_event;
page_server_sk_fd.fd = sk;
return epoll_add_rfd(epollfd, &page_server_sk_fd);
}
int cr_lazy_pages(bool daemon) int cr_lazy_pages(bool daemon)
{ {
struct epoll_event *events; struct epoll_event *events;
...@@ -876,7 +855,7 @@ int cr_lazy_pages(bool daemon) ...@@ -876,7 +855,7 @@ int cr_lazy_pages(bool daemon)
return -1; return -1;
if (opts.use_page_server) { if (opts.use_page_server) {
if (prepare_page_server_socket(epollfd)) if (connect_to_page_server_to_recv(epollfd))
return -1; return -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