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)
if (vdso_init())
goto err;
if (connect_to_page_server() < 0)
if (connect_to_page_server_to_send() < 0)
goto err;
if (setup_alarm_handler())
......@@ -1761,7 +1761,7 @@ int cr_dump_tasks(pid_t pid)
goto err;
}
if (connect_to_page_server() < 0)
if (connect_to_page_server_to_send() < 0)
goto err;
if (setup_alarm_handler())
......
......@@ -37,7 +37,8 @@ extern int open_page_xfer(struct page_xfer *xfer, int fd_type, long id);
struct page_pipe;
extern int page_xfer_dump_pages(struct page_xfer *, struct page_pipe *,
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 check_parent_page_xfer(int fd_type, long id);
......@@ -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 *);
extern int page_server_start_async_read(void *buf, int nr_pages,
ps_async_read_complete complete, void *priv);
extern int page_server_async_read(void);
#endif /* __CR_PAGE_XFER__H__ */
......@@ -885,7 +885,7 @@ no_server:
return ret;
}
int connect_to_page_server(void)
static int connect_to_page_server(void)
{
if (!opts.use_page_server)
return 0;
......@@ -906,7 +906,12 @@ out:
* on urgent data is the smartest mode ever.
*/
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)
......@@ -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
* 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;
int ret, need;
......@@ -1035,6 +1040,19 @@ int page_server_async_read(void)
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)
{
struct page_server_iov pi = {
......
......@@ -805,27 +805,6 @@ close_uffd:
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)
{
struct epoll_event *events;
......@@ -876,7 +855,7 @@ int cr_lazy_pages(bool daemon)
return -1;
if (opts.use_page_server) {
if (prepare_page_server_socket(epollfd))
if (connect_to_page_server_to_recv(epollfd))
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