[CRIU] [PATCH v5 05/11] files: Add fd_open_state::finalize method()
Kirill Tkhai
ktkhai at virtuozzo.com
Thu Jun 16 06:53:38 PDT 2016
Add a method, which allows to close temporary files,
used on restore stage. This will be used in next patches.
v5: New
Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
---
criu/files.c | 9 +++++++++
criu/include/files.h | 3 +++
2 files changed, 12 insertions(+)
diff --git a/criu/files.c b/criu/files.c
index b9fdbdc..036e054 100644
--- a/criu/files.c
+++ b/criu/files.c
@@ -676,6 +676,7 @@ static int collect_fd(int pid, FdinfoEntry *e, struct rst_info *rst_info)
futex_init(&new_le->real_pid);
new_le->pid = pid;
new_le->fe = e;
+ new_le->flags = 0;
fdesc = find_file_desc(e);
if (fdesc == NULL) {
@@ -854,12 +855,14 @@ static int open_transport_fd(int pid, struct fdinfo_list_entry *fle);
static int open_fd(int pid, struct fdinfo_list_entry *fle);
static int receive_fd(int pid, struct fdinfo_list_entry *fle);
static int post_open_fd(int pid, struct fdinfo_list_entry *fle);
+static int finalize_fd(int pid, struct fdinfo_list_entry *fle);
static struct fd_open_state states[] = {
{ "prepare", open_transport_fd, true,},
{ "create", open_fd, true,},
{ "receive", receive_fd, false,},
{ "post_create", post_open_fd, false,},
+ { "finalize", finalize_fd, true,},
};
#define want_recv_stage() do { states[2].required = true; } while (0)
@@ -993,6 +996,12 @@ static int post_open_fd(int pid, struct fdinfo_list_entry *fle)
return d->ops->post_open(d, fle->fe->fd);
}
+static int finalize_fd(int pid, struct fdinfo_list_entry *fle)
+{
+ if (fle->flags & FD_LE_GHOST)
+ close(fle->fe->fd);
+ return 0;
+}
static int serve_out_fd(int pid, int fd, struct file_desc *d)
{
diff --git a/criu/include/files.h b/criu/include/files.h
index 5e3d6dc..06a1f98 100644
--- a/criu/include/files.h
+++ b/criu/include/files.h
@@ -62,6 +62,7 @@ extern int fill_fdlink(int lfd, const struct fd_parms *p, struct fd_link *link);
struct file_desc;
+
struct fdinfo_list_entry {
struct list_head desc_list; /* To chain on @fd_info_head */
struct file_desc *desc; /* Associated file descriptor */
@@ -70,6 +71,8 @@ struct fdinfo_list_entry {
int pid;
futex_t real_pid;
FdinfoEntry *fe;
+#define FD_LE_GHOST 0x1
+ unsigned flags;
};
/* reports whether fd_a takes prio over fd_b */
More information about the CRIU
mailing list