[CRIU] [PATCH 3/5] mount: Turn into --external
Pavel Emelyanov
xemul at virtuozzo.com
Tue Oct 25 08:27:25 PDT 2016
Make --external support --ext-mount-map. The syntax is
--ext-mount-map KEY:VAL == --external mnt[KEY]:VAL
Old option is kept for backward compatibility.
Signed-off-by: Pavel Emelyanov <xemul at virtuozzo.com>
---
criu/crtools.c | 4 ++--
criu/include/mount.h | 18 ------------------
criu/mount.c | 37 ++++++++++++++++++++++++-------------
3 files changed, 26 insertions(+), 33 deletions(-)
diff --git a/criu/crtools.c b/criu/crtools.c
index 3e8d68f..8e35e67 100644
--- a/criu/crtools.c
+++ b/criu/crtools.c
@@ -850,10 +850,12 @@ usage:
" file[mnt_id:inode]\n"
" dev[maj:min]:VAL\n"
" unix[ino]\n"
+" mnt[MOUNTPOINT]:COOKIE\n"
" Formats of RES on restore:\n"
" dev[VAL]:DEVPATH\n"
" veth[IFNAME]:OUTNAME{@BRIDGE}\n"
" macvlan[IFNAME]:OUTNAME\n"
+" mnt[COOKIE]:ROOT\n"
"\n"
"* Special resources support:\n"
" --" SK_EST_PARAM " checkpoint/restore established TCP connections\n"
@@ -870,8 +872,6 @@ usage:
" --force-irmap force resolving names for inotify/fsnotify watches\n"
" --irmap-scan-path FILE\n"
" add a path the irmap hints to scan\n"
-" -M|--ext-mount-map KEY:VALUE\n"
-" add external mount mapping\n"
" -M|--ext-mount-map auto\n"
" attempt to autodetect external mount mappings\n"
" --enable-external-sharing\n"
diff --git a/criu/include/mount.h b/criu/include/mount.h
index d4a7c04..c9a958a 100644
--- a/criu/include/mount.h
+++ b/criu/include/mount.h
@@ -10,24 +10,6 @@ struct pstree_item;
struct fstype;
struct ns_id;
-/*
- * Structure to keep external mount points resolving info.
- *
- * On dump the key is the mountpoint as seen from the mount
- * namespace, the val is some name that will be put into image
- * instead of the mount point's root path.
- *
- * On restore the key is the name from the image (the one
- * mentioned above) and the val is the path in criu's mount
- * namespace that will become the mount point's root, i.e. --
- * be bind mounted to the respective mountpoint.
- */
-struct ext_mount {
- struct list_head list;
- char *key;
- char *val;
-};
-
#define MOUNT_INVALID_DEV (0)
struct mount_info {
diff --git a/criu/mount.c b/criu/mount.c
index 02fec0f..e3f33a4 100644
--- a/criu/mount.c
+++ b/criu/mount.c
@@ -45,29 +45,40 @@
int ext_mount_add(char *key, char *val)
{
- struct ext_mount *em;
+ char *e_str;
- em = xmalloc(sizeof(*em));
- if (!em)
+ e_str = xmalloc(strlen(key) + strlen(val) + 8);
+ if (!e_str)
return -1;
- em->key = key;
- em->val = val;
- list_add_tail(&em->list, &opts.ext_mounts);
- pr_info("Added %s:%s ext mount mapping\n", key, val);
- return 0;
+ /*
+ * On dump the key is the mountpoint as seen from the mount
+ * namespace, the val is some name that will be put into image
+ * instead of the mount point's root path.
+ *
+ * On restore the key is the name from the image (the one
+ * mentioned above) and the val is the path in criu's mount
+ * namespace that will become the mount point's root, i.e. --
+ * be bind mounted to the respective mountpoint.
+ */
+
+ sprintf(e_str, "mnt[%s]:%s", key, val);
+ return add_external(e_str);
}
/* Lookup ext_mount by key field */
static char *ext_mount_lookup(char *key)
{
- struct ext_mount *em;
+ char *v;
+ int len = strlen(key);
+ char mkey[len + 8];
- list_for_each_entry(em, &opts.ext_mounts, list)
- if (!strcmp(em->key, key))
- return em->val;
+ sprintf(mkey, "mnt[%s]", key);
+ v = external_lookup_by_key(mkey);
+ if (IS_ERR(v))
+ v = NULL;
- return NULL;
+ return v;
}
/*
--
2.5.0
More information about the CRIU
mailing list