[CRIU] [PATCH 5/6] mount: clone a mount namespace to open a detached mount
Andrei Vagin
avagin at virtuozzo.com
Mon Feb 6 22:19:27 PST 2017
On Mon, Feb 06, 2017 at 01:12:48PM +0300, Pavel Emelyanov wrote:
> On 01/04/2017 02:40 AM, Andrei Vagin wrote:
> > From: Andrei Vagin <avagin at virtuozzo.com>
> >
> > If we can't create a temporary directory for a detached mount,
> > we can clone a whole mount namespace, open a mount and release
> > the created namespace. The result will be the same.
> >
> > https://jira.sw.ru/browse/PSBM-57135
> > https://github.com/opencontainers/runc/issues/1202
> > Signed-off-by: Andrei Vagin <avagin at virtuozzo.com>
> > ---
> > criu/mount.c | 18 +++++++++++++++---
> > 1 file changed, 15 insertions(+), 3 deletions(-)
> >
> > diff --git a/criu/mount.c b/criu/mount.c
> > index 4749f59..c0bf234 100644
> > --- a/criu/mount.c
> > +++ b/criu/mount.c
> > @@ -1123,10 +1123,22 @@ int open_mountpoint(struct mount_info *pm)
> > goto out;
> >
> > mnt_path = get_clean_mnt(pm, mnt_path_tmp, mnt_path_root);
> > - if (mnt_path == NULL)
> > - goto out;
> > + if (mnt_path == NULL) {
> > + /*
> > + * We probably can't create a temporary direcotry,
> > + * so we can try to clone the mount namespace, open
> > + * the required mount and destroy this mount namespace.
> > + */
>
> Creation is seen (unshare), where is the destruction part?
This function will call restore_ns()
>
> > + if (unshare(CLONE_NEWNS)) {
> > + pr_perror("Unable to clone a mount namespace");
> > + goto out;
> > + }
> >
> > - fd = open_detach_mount(mnt_path);
> > + fd = open(pm->mountpoint, O_RDONLY | O_DIRECTORY, 0);
> > + if (fd < 0)
> > + pr_perror("Can't open directory %s: %d", pm->mountpoint, fd);
> > + } else
> > + fd = open_detach_mount(mnt_path);
> > if (fd < 0)
> > goto out;
if (restore_ns(ns_old, &mnt_ns_desc)) {
ns_old = -1;
goto out;
}
> >
> >
>
More information about the CRIU
mailing list