[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