[CRIU] [PATCH 1/4] remap: add remap_type field and use it
Tycho Andersen
tycho.andersen at canonical.com
Fri Sep 12 11:12:59 PDT 2014
Maintain backwards compatibility for old images, but don't set the REMAP_GHOST
bit going forward, only use the remap_type field.
Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
---
files-reg.c | 31 ++++++++++++++++++++++++-------
protobuf/remap-file-path.proto | 6 ++++++
2 files changed, 30 insertions(+), 7 deletions(-)
diff --git a/files-reg.c b/files-reg.c
index 0ffce0e..835911a 100644
--- a/files-reg.c
+++ b/files-reg.c
@@ -131,7 +131,6 @@ static int open_remap_ghost(struct reg_file_info *rfi,
int ifd;
char *root;
- rfe->remap_id &= ~REMAP_GHOST;
list_for_each_entry(gf, &ghost_files, list)
if (gf->id == rfe->remap_id)
goto gf_found;
@@ -246,10 +245,29 @@ static int collect_one_remap(void *obj, ProtobufCMessage *msg)
rfi = container_of(fdesc, struct reg_file_info, d);
pr_info("Configuring remap %#x -> %#x\n", rfi->rfe->id, rfe->remap_id);
- if (rfe->remap_id & REMAP_GHOST)
- ret = open_remap_ghost(rfi, rfe);
- else
+
+ if (!rfe->has_remap_type) {
+ rfe->has_remap_type = true;
+ /* backward compatibility with images */
+ if (rfe->remap_id & REMAP_GHOST) {
+ rfe->remap_id &= ~REMAP_GHOST;
+ rfe->remap_type = REMAP_TYPE__GHOST;
+ } else
+ rfe->remap_type = REMAP_TYPE__LINKED;
+ }
+
+ switch (rfe->remap_type) {
+ case REMAP_TYPE__LINKED:
ret = open_remap_linked(rfi, rfe);
+ break;
+ case REMAP_TYPE__GHOST:
+ ret = open_remap_ghost(rfi, rfe);
+ break;
+ default:
+ pr_err("unknown remap type %u\n", rfe->remap_type);
+ goto out;
+ }
+
out:
return ret;
}
@@ -375,10 +393,9 @@ static int dump_ghost_remap(char *path, const struct stat *st,
return -1;
dump_entry:
- BUG_ON(gf->id & REMAP_GHOST);
-
rpe.orig_id = id;
- rpe.remap_id = gf->id | REMAP_GHOST;
+ rpe.has_remap_type = true;
+ rpe.remap_type = REMAP_TYPE__GHOST;
return pb_write_one(fdset_fd(glob_fdset, CR_FD_REMAP_FPATH),
&rpe, PB_REMAP_FPATH);
diff --git a/protobuf/remap-file-path.proto b/protobuf/remap-file-path.proto
index faeb745..cb8568f 100644
--- a/protobuf/remap-file-path.proto
+++ b/protobuf/remap-file-path.proto
@@ -1,4 +1,10 @@
+enum remap_type {
+ LINKED = 0;
+ GHOST = 1;
+};
+
message remap_file_path_entry {
required uint32 orig_id = 1;
required uint32 remap_id = 2;
+ optional uint32 remap_type = 3;
}
--
1.9.1
More information about the CRIU
mailing list