[CRIU] [PATCH 04/13] mounts: allow to customize root path for cr_pivot_root
Andrew Vagin
avagin at parallels.com
Tue Mar 11 12:53:02 PDT 2014
On Tue, Mar 11, 2014 at 11:36:18PM +0400, Pavel Emelyanov wrote:
> On 03/11/2014 07:18 PM, Andrey Vagin wrote:
> > We are going to restore nested mount namespaces and we will need to
> > change root for each of them.
> >
> > Signed-off-by: Andrey Vagin <avagin at openvz.org>
> > ---
> > mount.c | 16 +++++++++++++---
> > 1 file changed, 13 insertions(+), 3 deletions(-)
> >
> > diff --git a/mount.c b/mount.c
> > index 28a0072..ee79ec7 100644
> > --- a/mount.c
> > +++ b/mount.c
> > @@ -1199,11 +1199,16 @@ static int clean_mnt_ns(void)
> > return mnt_tree_for_each_reverse(mntinfo_tree, do_umount_one);
> > }
> >
> > -static int cr_pivot_root(void)
> > +static int cr_pivot_root(char *root)
> > {
> > char put_root[] = "crtools-put-root.XXXXXX";
> >
> > - pr_info("Move the root to %s\n", opts.root);
> > + pr_info("Move the root to %s\n", root);
> > +
> > + if (chdir(root)) {
>
> There's the 2nd chdir() in the caller. Is it OK?
* cr_pivot_root will be called from two places
* One of callers restores mount namespaces beetwen chdir and pivot_root
>
> > + pr_perror("chdir(%s) failed", root);
> > + return -1;
> > + }
> >
> > if (mkdtemp(put_root) == NULL) {
> > pr_perror("Can't create a temporary directory");
> > @@ -1217,6 +1222,11 @@ static int cr_pivot_root(void)
> > return -1;
> > }
> >
> > + if (mount("none", put_root, "none", MS_REC|MS_PRIVATE, NULL)) {
> > + pr_perror("Can't remount root with MS_PRIVATE");
> > + return -1;
> > + }
>
> And this MS_PRIVATE tagging either. Is it OK as well?
Yes, here we mark put_root. put_root contains other namespaces and we
don't want to affect them.
>
> > +
> > if (umount2(put_root, MNT_DETACH)) {
> > pr_perror("Can't umount %s", put_root);
> > return -1;
> > @@ -1415,7 +1425,7 @@ int prepare_mnt_ns(int ns_pid)
> > goto out;
> >
> > if (opts.root)
> > - ret = cr_pivot_root();
> > + ret = cr_pivot_root(opts.root);
> > out:
> > return ret;
> > }
> >
>
>
More information about the CRIU
mailing list