[CRIU] [PATCH 2/3] mount: Helper for auto-ext entry creation
Pavel Emelyanov
xemul at virtuozzo.com
Wed Sep 21 02:59:20 PDT 2016
Signed-off-by: Pavel Emelyanov <xemul at virtuozzo.com>
---
criu/mount.c | 46 +++++++++++++++++++++++++++++-----------------
1 file changed, 29 insertions(+), 17 deletions(-)
diff --git a/criu/mount.c b/criu/mount.c
index 021d041..40e871b 100644
--- a/criu/mount.c
+++ b/criu/mount.c
@@ -34,6 +34,11 @@
#include "images/mnt.pb-c.h"
#include "images/binfmt-misc.pb-c.h"
+/*
+ * Put a : in here since those are invalid on
+ * the cli, so we know it's autogenerated in
+ * debugging.
+ */
#define AUTODETECTED_MOUNT "CRIU:AUTOGENERATED"
#define MS_PROPAGATE (MS_SHARED | MS_PRIVATE | MS_UNBINDABLE | MS_SLAVE)
@@ -78,6 +83,19 @@ static struct ext_mount *ext_mount_lookup(char *key)
return NULL;
}
+static struct ext_mount *ext_mount_make_auto(char *key, char *val)
+{
+ struct ext_mount *em;
+
+ em = xmalloc(sizeof(*em));
+ if (em) {
+ em->key = key;
+ em->val = val;
+ }
+
+ return em;
+}
+
/*
* Single linked list of mount points get from proc/images
*/
@@ -816,7 +834,6 @@ static int resolve_external_mounts(struct mount_info *info)
for (m = info; m; m = m->next) {
int ret;
char *p, *cut_root;
- struct ext_mount *em;
struct mount_info *match;
if (m->parent == NULL || m->is_ns_root)
@@ -860,17 +877,16 @@ static int resolve_external_mounts(struct mount_info *info)
if (!p)
return -1;
- em = xmalloc(sizeof(struct ext_mount));
- if (!em) {
+ m->external = ext_mount_make_auto(p, AUTODETECTED_MOUNT);
+ if (!m->external) {
free(p);
return -1;
}
- em->val = AUTODETECTED_MOUNT;
- em->key = p;
-
- m->external = em;
-
+ /*
+ * Put the guessed name in source. It will be picked up
+ * as auto-root in get_mp_root() on restore.
+ */
xfree(m->source);
m->source = p;
@@ -3085,18 +3101,14 @@ static int get_mp_root(MntEntry *me, struct mount_info *mi)
* Make up an external mount entry for this
* mount point, since we couldn't find a user
* supplied one.
+ *
+ * The 'val' was put into mi->source during
+ * dump by resolve_external_mounts().
*/
- em = xmalloc(sizeof(struct ext_mount));
+
+ em = ext_mount_make_auto(AUTODETECTED_MOUNT, mi->source);
if (!em)
return -1;
-
- /*
- * Put a : in here since those are invalid on
- * the cli, so we know it's autogenerated in
- * debugging.
- */
- em->key = AUTODETECTED_MOUNT;
- em->val = mi->source;
}
mi->external = em;
--
2.5.0
More information about the CRIU
mailing list