[CRIU] [PATCH] mount: don't overmount a mount if it should be bind-mounted somewhere
Andrew Vagin
avagin at virtuozzo.com
Fri Apr 29 08:21:10 PDT 2016
On Fri, Apr 29, 2016 at 02:55:57PM +0300, Pavel Emelyanov wrote:
> On 04/28/2016 11:08 PM, Andrey Vagin wrote:
> > From: Andrew Vagin <avagin at virtuozzo.com>
> >
> > It's impossiable to make a bind-mount if a source is overmounted.
> >
> > Reported-by: Stanislav Kinsburskiy <skinsbursky at virtuozzo.com>
> > Signed-off-by: Andrew Vagin <avagin at virtuozzo.com>
> > ---
> > criu/mount.c | 8 ++++++++
> > 1 file changed, 8 insertions(+)
> >
> > diff --git a/criu/mount.c b/criu/mount.c
> > index 0b1c2ba..9dcd7d2 100644
> > --- a/criu/mount.c
> > +++ b/criu/mount.c
> > @@ -2554,6 +2554,14 @@ static bool can_mount_now(struct mount_info *mi)
> > if (!mi->parent)
> > return true;
> >
> > + if (strcmp(mi->parent->mountpoint, mi->mountpoint) == 0) {
> > + struct mount_info *b;
> > +
> > + list_for_each_entry(b, &mi->parent->mnt_bind, mnt_bind)
> > + if (!b->mounted)
> > + return false;
>
> Source is overmounted and we say "can't mount now", that's OK. But where's
> the guarantee that the source will stop being such, so we'll be able to truen
> true from here?
It's a good question, but it should not block this patch. Without this
patch we don't returen false from here and then create a wrong bind
mount. With this patch we don't do this mistake, but sometimes can
return a error that we are not able to restore a mount tree.
I'm thinking what we should add into validate_mounts() to be sure that
we will be able to restore a mount tree.
>
> > + }
> > +
> > if (mi->external)
> > goto shared;
> >
> >
>
More information about the CRIU
mailing list