[CRIU] [PATCH v2 3/5] mount: save ext_real_root for external mounts

Andrew Vagin avagin at virtuozzo.com
Tue Mar 21 18:02:14 PDT 2017


On Tue, Mar 21, 2017 at 10:53:25AM +0300, Pavel Tikhomirov wrote:
> 
> 
> On 03/20/2017 10:03 PM, Andrew Vagin wrote:
> > On Mon, Mar 20, 2017 at 12:45:42PM +0300, Pavel Tikhomirov wrote:
> > > need it to check if we can bindmount from external mount
> > > 
> > > https://jira.sw.ru/browse/PSBM-46753
> > > 
> > > v2: s/real_root/ext_real_root/
> > > Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
> > > ---
> > >  criu/mount.c     | 3 ++-
> > >  images/mnt.proto | 1 +
> > >  2 files changed, 3 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/criu/mount.c b/criu/mount.c
> > > index 6e5a4c6..ef5c1ec 100644
> > > --- a/criu/mount.c
> > > +++ b/criu/mount.c
> > > @@ -1335,6 +1335,7 @@ static int dump_one_mountpoint(struct mount_info *pm, struct cr_img *img)
> > >  		 * for reverse mapping details.
> > >  		 */
> > >  		me.root	= pm->external;
> > > +		me.ext_real_root = pm->root;
> > >  		me.has_ext_mount = true;
> > >  		me.ext_mount = true;
> > >  	} else
> > > @@ -2445,7 +2446,7 @@ static int get_mp_root(MntEntry *me, struct mount_info *mi)
> > >  {
> > >  	char *ext = NULL;
> > > 
> > > -	mi->root = xstrdup(me->root);
> > > +	mi->root = xstrdup(me->ext_real_root ? : me->root);
> > >  	if (!mi->root)
> > >  		return -1;
> > > 
> > > diff --git a/images/mnt.proto b/images/mnt.proto
> > > index 50cd8af..3294319 100644
> > > --- a/images/mnt.proto
> > > +++ b/images/mnt.proto
> > > @@ -53,4 +53,5 @@ message mnt_entry {
> > > 
> > >  	optional bool		deleted			= 16;
> > >  	optional uint32		sb_flags		= 17 [(criu).hex = true];
> > > +	optional string		ext_real_root		= 18;
> > 
> > We need a comment here what this means. What do you think if we add
> > ext_key instead of ext_real_root, for me it looks more understandable.
> 
> If we use me->root for real root, and me->ext_key for the key of the mount,
> that would surely break backward compatibility, as old criu will still want
> the key in me->root.

If .ext_mount is true and .has_ext_key is true, you need to get key from
.ext_key, otherwise we get it from .root. Maybe you mean that we will
not be able to restore processes with old criu, if they have been dumped
them by a new one. It is true, but we don't require this type of
compatibility. I think it's better to have a clean images.

> 
> Thus we should leave the key of the mount in me->root. And naming the field
> in which I want to save the real root(path in the file system to the root of
> these mount) as me->ext_key is counterintuitive to me.
> 
> > >  }
> > > --
> > > 2.9.3
> > > 
> 
> -- 
> Best regards, Tikhomirov Pavel
> Software Developer, Virtuozzo.


More information about the CRIU mailing list