Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/checkpoint-restore/criu.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Vagin <avagin@openvz.org>2015-10-10 01:49:38 +0300
committerPavel Emelyanov <xemul@parallels.com>2015-10-22 16:13:15 +0300
commit00acf5228fbb16f1768b8ed040cb901df291f1db (patch)
tree763665f43c087e974cfe067424a2c91f1dcbfd82
parentdfef4e05d5b8eb7097c15dc5dce181140b5da406 (diff)
fsnotify: save mnt_id with path
Otherwise it's impossible to understand from which namespace this path should be opened. Signed-off-by: Andrew Vagin <avagin@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
-rw-r--r--fsnotify.c16
-rw-r--r--protobuf/fh.proto1
2 files changed, 14 insertions, 3 deletions
diff --git a/fsnotify.c b/fsnotify.c
index a7f7acf13..b8f9c227d 100644
--- a/fsnotify.c
+++ b/fsnotify.c
@@ -169,6 +169,9 @@ int check_open_handle(unsigned int s_dev, unsigned long i_ino,
if (path == NULL)
goto err;
+ f_handle->has_mnt_id = true;
+ f_handle->mnt_id = mi->mnt_id;
+
goto out;
}
@@ -426,12 +429,19 @@ static char *get_mark_path(const char *who, struct file_remap *remap,
*target = openat(mntns_root, remap->path, O_PATH);
} else if (f_handle->path) {
int mntns_root;
+ char *path = ".";
+ uint32_t mnt_id = f_handle->has_mnt_id ? f_handle->mnt_id : -1;
+
/* irmap cache is collected in the root namespaces. */
- mntns_root = mntns_get_root_by_mnt_id(-1);
+ mntns_root = mntns_get_root_by_mnt_id(mnt_id);
+
+ /* change "/foo" into "foo" and "/" into "." */
+ if (f_handle->path[1] != '\0')
+ path = f_handle->path + 1;
- pr_debug("\t\tRestore with path hint %s\n", f_handle->path);
- *target = openat(mntns_root, f_handle->path, O_PATH);
+ pr_debug("\t\tRestore with path hint %d:%s\n", mnt_id, path);
+ *target = openat(mntns_root, path, O_PATH);
} else
*target = open_handle(s_dev, i_ino, f_handle);
diff --git a/protobuf/fh.proto b/protobuf/fh.proto
index c100c315d..eb73d66cf 100644
--- a/protobuf/fh.proto
+++ b/protobuf/fh.proto
@@ -9,6 +9,7 @@ message fh_entry {
/* The minimum is fh_n_handle repetitions */
repeated uint64 handle = 3;
optional string path = 4;
+ optional uint32 mnt_id = 5;
}
message irmap_cache_entry {