From cfe72ab77ac4ce3f5ff00a7e9c11b3763469ee5e Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Sat, 28 Sep 2013 06:06:53 +0400 Subject: [PATCH] service: Put service sk inode into separate variable I'm about to get rid of service state struct. Signed-off-by: Pavel Emelyanov --- cr-service.c | 4 +++- include/cr-service.h | 2 +- sk-unix.c | 7 +------ 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/cr-service.c b/cr-service.c index 39d96e2ec..f7ddbc459 100644 --- a/cr-service.c +++ b/cr-service.c @@ -19,6 +19,7 @@ #include "cr-service.h" struct _cr_service_client *cr_service_client; +unsigned int service_sk_ino = 0; static int recv_criu_msg(int socket_fd, CriuReq **msg) { @@ -94,7 +95,8 @@ static int setup_dump_from_req(int sk, CriuDumpReq *req) return -1; } - cr_service_client->sk_ino = st.st_ino; + BUG_ON(st.st_ino == 0); + service_sk_ino = st.st_ino; /* going to dir, where to place images*/ sprintf(images_dir_path, "/proc/%d/fd/%d", ids.pid, req->images_dir_fd); diff --git a/include/cr-service.h b/include/cr-service.h index 7fdbec0ae..0ad2c0e05 100644 --- a/include/cr-service.h +++ b/include/cr-service.h @@ -11,10 +11,10 @@ int cr_service(bool deamon_mode); int send_criu_dump_resp(int socket_fd, bool success, bool restored); struct _cr_service_client { - int sk_ino; int uid; }; extern struct _cr_service_client *cr_service_client; +extern unsigned int service_sk_ino; #endif diff --git a/sk-unix.c b/sk-unix.c index 902d3d451..3bb7c101d 100644 --- a/sk-unix.c +++ b/sk-unix.c @@ -88,11 +88,6 @@ static void show_one_unix_img(const char *act, const UnixSkEntry *e) act, e->id, e->ino, e->peer, e->type, e->state, (int)e->name.len); } -static bool service_socket(unsigned int sk_ino) -{ - return cr_service_client && (cr_service_client->sk_ino == sk_ino); -} - static int can_dump_unix_sk(const struct unix_sk_desc *sk) { /* @@ -156,7 +151,7 @@ static int dump_one_unix_fd(int lfd, u32 id, const struct fd_parms *p) * Check if this socket is connected to criu service. * Dump it like closed one and mark it for restore. */ - if (service_socket(ue.peer)) { + if (unlikely(ue.peer == service_sk_ino)) { ue.state = TCP_CLOSE; ue.peer = 0; ue.uflags |= USK_SERVICE;