Commit 1c54c003 authored by Mike Rapoport's avatar Mike Rapoport Committed by Andrei Vagin

lazy-pages: refactor unix socket initializaton

so that listenning file descriptor might be used in select/poll
Signed-off-by: 's avatarMike Rapoport <rppt@linux.vnet.ibm.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
parent d08ea98b
...@@ -155,23 +155,16 @@ out: ...@@ -155,23 +155,16 @@ out:
static int pid; static int pid;
static int ud_open() static int ud_open(int listen, struct sockaddr_un *saddr)
{ {
int client; int client;
int listen;
int newfd; int newfd;
int ret = -1; int ret = -1;
struct sockaddr_un saddr;
socklen_t len; socklen_t len;
if ((listen = server_listen(&saddr)) < 0) {
pr_perror("server_listen error");
return -1;
}
/* accept new client request */ /* accept new client request */
len = sizeof(struct sockaddr_un); len = sizeof(struct sockaddr_un);
if ((client = accept(listen, (struct sockaddr *)&saddr, &len)) < 0) { if ((client = accept(listen, (struct sockaddr *)saddr, &len)) < 0) {
pr_perror("server_accept error: %d", client); pr_perror("server_accept error: %d", client);
close(listen); close(listen);
return -1; return -1;
...@@ -199,7 +192,6 @@ static int ud_open() ...@@ -199,7 +192,6 @@ static int ud_open()
return newfd; return newfd;
out: out:
close(listen);
close(client); close(client);
return ret; return ret;
} }
...@@ -643,10 +635,11 @@ out: ...@@ -643,10 +635,11 @@ out:
int cr_lazy_pages() int cr_lazy_pages()
{ {
int listen;
int uffd; int uffd;
int uffd_flags; int uffd_flags;
int ret;
LIST_HEAD(uffd_list); struct sockaddr_un saddr;
if (!opts.addr) { if (!opts.addr) {
pr_info("Please specify a file name for the unix domain socket\n"); pr_info("Please specify a file name for the unix domain socket\n");
...@@ -657,14 +650,25 @@ int cr_lazy_pages() ...@@ -657,14 +650,25 @@ int cr_lazy_pages()
} }
pr_debug("Waiting for incoming connections on %s\n", opts.addr); pr_debug("Waiting for incoming connections on %s\n", opts.addr);
if ((uffd = ud_open()) < 0) if ((listen = server_listen(&saddr)) < 0) {
exit(0); pr_perror("server_listen error");
return -1;
}
uffd = ud_open(listen, &saddr);
if (uffd < 0) {
pr_perror("uffd open error");
return -1;
}
pr_debug("uffd is 0x%d\n", uffd); pr_debug("uffd is 0x%d\n", uffd);
uffd_flags = fcntl(uffd, F_GETFD, NULL); uffd_flags = fcntl(uffd, F_GETFD, NULL);
pr_debug("uffd_flags are 0x%x\n", uffd_flags); pr_debug("uffd_flags are 0x%x\n", uffd_flags);
return handle_requests(uffd); ret = handle_requests(uffd);
close(listen);
return ret;
} }
#else /* CONFIG_HAS_UFFD */ #else /* CONFIG_HAS_UFFD */
......
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