From patchwork Tue Oct 25 15:27:13 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [2/5] mount: Keep external->val on mi From: Pavel Emelyanov X-Patchwork-Id: 2207 Message-Id: <580F79D1.9040604@virtuozzo.com> To: CRIU Date: Tue, 25 Oct 2016 18:27:13 +0300 Right now struct mount_info only keeps the ext_mount_map for ->val field. Since we're planning to switch onto --external engine we won't have this struct and thus only char *is OK. Signed-off-by: Pavel Emelyanov --- criu/include/mount.h | 2 +- criu/mount.c | 55 +++++++++++++++------------------------------------- 2 files changed, 17 insertions(+), 40 deletions(-) diff --git a/criu/include/mount.h b/criu/include/mount.h index e099355..d4a7c04 100644 --- a/criu/include/mount.h +++ b/criu/include/mount.h @@ -67,7 +67,7 @@ struct mount_info { struct mount_info *next; struct ns_id *nsid; - struct ext_mount *external; + char *external; bool internal_sharing; /* tree linkage */ diff --git a/criu/mount.c b/criu/mount.c index af0d01c..02fec0f 100644 --- a/criu/mount.c +++ b/criu/mount.c @@ -59,34 +59,17 @@ int ext_mount_add(char *key, char *val) } /* Lookup ext_mount by key field */ -static struct ext_mount *ext_mount_lookup(char *key) +static char *ext_mount_lookup(char *key) { struct ext_mount *em; list_for_each_entry(em, &opts.ext_mounts, list) if (!strcmp(em->key, key)) - return em; + return em->val; return NULL; } -static struct ext_mount *ext_mount_make_auto(char *val) -{ - struct ext_mount *em; - - em = xmalloc(sizeof(*em)); - if (em) { - /* - * The key is (should) only be used for lookup by - * ext_mount_lookup() above. - */ - em->key = (char *)0x00BEDA00; - em->val = val; - } - - return em; -} - /* * Single linked list of mount points get from proc/images */ @@ -483,14 +466,14 @@ static void mnt_tree_show(struct mount_info *tree, int off) /* Returns -1 on error, 1 if external mount resolved, 0 otherwise */ static int try_resolve_ext_mount(struct mount_info *info) { - struct ext_mount *em; + char *ext; char devstr[64]; - em = ext_mount_lookup(info->mountpoint + 1 /* trim the . */); - if (em) { + ext = ext_mount_lookup(info->mountpoint + 1 /* trim the . */); + if (ext) { pr_info("Found %s mapping for %s mountpoint\n", - em->val, info->mountpoint); - info->external = em; + ext, info->mountpoint); + info->external = ext; return 1; } @@ -850,11 +833,7 @@ static int resolve_external_mounts(struct mount_info *info) if (!p) return -1; - m->external = ext_mount_make_auto(AUTODETECTED_MOUNT); - if (!m->external) { - free(p); - return -1; - } + m->external = AUTODETECTED_MOUNT; /* * Put the guessed name in source. It will be picked up @@ -1298,7 +1277,7 @@ static int dump_one_mountpoint(struct mount_info *pm, struct cr_img *img) * value instead of root. See collect_mnt_from_image * for reverse mapping details. */ - me.root = pm->external->val; + me.root = pm->external; me.has_ext_mount = true; me.ext_mount = true; } else @@ -1820,7 +1799,7 @@ static int do_bind_mount(struct mount_info *mi) * is tuned in collect_mnt_from_image to refer * to proper location in the namespace we restore. */ - root = mi->external->val; + root = mi->external; private = !mi->master_id && (mi->internal_sharing || !mi->shared_id); goto do_bind; } @@ -2270,7 +2249,7 @@ static int rst_collect_local_mntns(enum ns_type typ) static int get_mp_root(MntEntry *me, struct mount_info *mi) { - struct ext_mount *em = NULL; + char *ext = NULL; mi->root = xstrdup(me->root); if (!mi->root) @@ -2284,8 +2263,8 @@ static int get_mp_root(MntEntry *me, struct mount_info *mi) * from the command line and put into root's place */ - em = ext_mount_lookup(me->root); - if (!em) { + ext = ext_mount_lookup(me->root); + if (!ext) { if (!opts.autodetect_ext_mounts) { pr_err("No mapping for %s mountpoint\n", me->mountpoint); return -1; @@ -2300,15 +2279,13 @@ static int get_mp_root(MntEntry *me, struct mount_info *mi) * dump by resolve_external_mounts(). */ - em = ext_mount_make_auto(mi->source); - if (!em) - return -1; + ext = mi->source; } - mi->external = em; + mi->external = ext; out: pr_debug("\t\tWill mount %d from %s%s\n", - mi->mnt_id, em ? em->val : mi->root, em ? " (E)" : ""); + mi->mnt_id, ext ? : mi->root, ext ? " (E)" : ""); return 0; }