[CRIU] [PATCH] image: do_open_remote_image: Move the unix sockets to workdir
Omri Kramer
omri.kramer at gmail.com
Mon Jul 17 21:49:13 MSK 2017
It's better to open the unix sockets for dump and restore
inside the workdir. See TODO item 1 in:
https://github.com/xemul/criu/commit/037b2e3c95e098d63a3500834681543da544840e
Signed-off-by: Omri Kramer <omri.kramer at gmail.com>
Signed-off-by: Lior Fisch <fischlior at gmail.com>
---
criu/image.c | 32 +++++++++++++++++++++++++++++++-
criu/include/servicefd.h | 1 +
2 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/criu/image.c b/criu/image.c
index 62e8e71..7c21178 100644
--- a/criu/image.c
+++ b/criu/image.c
@@ -338,7 +338,7 @@ int do_open_remote_image(int dfd, char *path, int flags)
return -1;
}
- if (fchdir(get_service_fd(IMG_FD_OFF)) < 0) {
+ if (fchdir(get_service_fd(WRK_FD_OFF)) < 0) {
pr_perror("fchdir to dfd failed!");
close(save);
return -1;
@@ -465,6 +465,32 @@ struct cr_img *img_from_fd(int fd)
return img;
}
+static void close_work_dir(void)
+{
+ close_service_fd(WRK_FD_OFF);
+}
+
+static int open_work_dir(char *dir)
+{
+ int fd;
+
+ fd = open(dir, O_RDONLY);
+ if (fd < 0) {
+ pr_perror("Can't open dir %s", dir);
+ return -1;
+ }
+
+ if (install_service_fd(WRK_FD_OFF, fd) < 0) {
+ pr_perror("Can't install work_fd\n");
+ close(fd);
+ return -1;
+ }
+
+ close(fd);
+
+ return 0;
+}
+
int open_image_dir(char *dir)
{
int fd, ret;
@@ -481,6 +507,8 @@ int open_image_dir(char *dir)
if (opts.remote) {
init_snapshot_id(dir);
+ if (open_work_dir(opts.work_dir) < 0)
+ goto err;
} else if (opts.img_parent) {
ret = symlinkat(opts.img_parent, fd, CR_PARENT_LINK);
if (ret < 0 && errno != EEXIST) {
@@ -503,6 +531,8 @@ err:
void close_image_dir(void)
{
close_service_fd(IMG_FD_OFF);
+ if(opts.remote)
+ close_work_dir();
}
static unsigned long page_ids = 1;
diff --git a/criu/include/servicefd.h b/criu/include/servicefd.h
index b779223..66e4aeb 100644
--- a/criu/include/servicefd.h
+++ b/criu/include/servicefd.h
@@ -8,6 +8,7 @@ enum sfd_type {
LOG_FD_OFF,
IMG_FD_OFF,
+ WRK_FD_OFF,
PROC_FD_OFF, /* fd with /proc for all proc_ calls */
PROC_PID_FD_OFF,
CTL_TTY_OFF,
--
2.7.4
More information about the CRIU
mailing list