[CRIU] [PATCH 3/3] mount: Umount forced mounts on restore
Andrew Vagin
avagin at virtuozzo.com
Wed Jun 22 22:09:47 PDT 2016
On Wed, Jun 22, 2016 at 05:19:26PM +0300, Kirill Tkhai wrote:
> Umount mountpoints, which was forced mounted at dump.
>
> Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
> ---
> criu/include/mount.h | 1 +
> criu/mount.c | 23 +++++++++++++++++++++++
> images/mnt.proto | 1 +
> 3 files changed, 25 insertions(+)
>
> diff --git a/criu/include/mount.h b/criu/include/mount.h
> index 191f6a3..4554b2d 100644
> --- a/criu/include/mount.h
> +++ b/criu/include/mount.h
> @@ -70,6 +70,7 @@ struct mount_info {
>
> struct ext_mount *external;
> bool internal_sharing;
> + bool forced_mounted;
>
> /* tree linkage */
> struct mount_info *parent;
> diff --git a/criu/mount.c b/criu/mount.c
> index f91654c..c08d217 100644
> --- a/criu/mount.c
> +++ b/criu/mount.c
> @@ -1832,9 +1832,19 @@ static struct fstype *decode_fstype(u32 fst)
> static int dump_one_fs(struct mount_info *mi)
> {
> struct mount_info *pm = mi;
> + struct forced_mount *fm;
> struct mount_info *t;
> bool first = true;
>
> + list_for_each_entry(fm, &forced_mounts_list, list) {
> + if (fm->mnt_id == mi->mnt_id &&
> + fm->ns_id == mi->nsid->kid) {
> + pr_info("Mark forced mount %u in ns %u\n", fm->mnt_id, fm->ns_id);
> + mi->forced_mounted = true;
> + break;
> + }
> + }
> +
> if (mi->is_ns_root || mi->need_plugin || mi->external || !mi->fstype->dump)
> return 0;
>
> @@ -1902,6 +1912,11 @@ static int dump_one_mountpoint(struct mount_info *pm, struct cr_img *img)
> me.deleted = true;
> }
>
> + if (pm->forced_mounted) {
> + me.forced_mounted = pm->forced_mounted;
> + me.has_forced_mounted = true;
> + }
> +
> if (pm->internal_sharing) {
> me.has_internal_sharing = true;
> me.internal_sharing = true;
> @@ -2684,6 +2699,12 @@ static int do_mount_one(struct mount_info *mi)
> mi->fstype = find_fstype_by_name("btrfs");
> }
>
> + if (mi->forced_mounted) {
> + ret = umount(mi->mountpoint);
Who will umount it if criu dump doesn't kill processes (error cases or
--leave-running)? Maybe it's better to dump binfmt-misc without adding a
fake mount point?
> + if (ret)
> + pr_perror("Can't umount %s\n", mi->mountpoint);
> + }
> +
> return ret;
> }
>
> @@ -2998,6 +3019,8 @@ static int collect_mnt_from_image(struct mount_info **pms, struct ns_id *nsid)
> pm->is_ns_root = is_root(me->mountpoint);
> if (me->has_internal_sharing)
> pm->internal_sharing = me->internal_sharing;
> + if (me->has_forced_mounted)
> + pm->forced_mounted = me->forced_mounted;
>
> pm->source = xstrdup(me->source);
> if (!pm->source)
> diff --git a/images/mnt.proto b/images/mnt.proto
> index 9338ecb..4e56201 100644
> --- a/images/mnt.proto
> +++ b/images/mnt.proto
> @@ -46,4 +46,5 @@ message mnt_entry {
>
> optional bool deleted = 16;
> optional uint32 sb_flags = 17 [(criu).hex = true];
> + optional bool forced_mounted = 18;
> }
>
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
More information about the CRIU
mailing list