[CRIU] Sync TODO-s for mount.c work

Oleg Nesterov oleg at redhat.com
Thu Apr 23 04:17:32 PDT 2015


On 04/22, Tycho Andersen wrote:
>
> On Wed, Apr 22, 2015 at 07:48:25PM +0200, Oleg Nesterov wrote:
> >
> > To me, "remove this restriction" makes much more sense. In fact, this
> > restriction looks like a bug to me.
> >
> > Once again, in this particular case "auto" will wrongly treat all
> > mounts (except /) as a bind mount. This just means that you can never
> > use this option if the process inherits some mntpoint from parent ns.
>
> Right. Does the requiring pivot_root patch mask this for now?

Ah, so I misunderstood the intent. If you suggest this change as a
temporary hack which just "documents" the problem we need to solve
eventually, then I agree.

> And a second question, any ideas on how to fix this? :)

You are trolling me ;)

Not really. But can't we split the problem(s) to simplify the discussion?


I mean, unless I am totally confused, whatever we do we need to change
resolve_external_mounts() to _not_ create ->external for the mnts which
are not actually external.

So we need, say, is_not_external_mount(m). Lets pretend it is just

	bool is_not_external_mount(m)
	{
		return fsroot_mounted(m);
	}

yes, yes, this is wrong. But. It can work just fine in this particular
case:

	# unshare -m

	# mount --make-slave /
	# mount --make-shared /

	# mkdir /tmp/A /tmp/B
	# mount --bind /tmp/A /tmp/B

	# cat /proc/self/mountinfo
	26 20 253:1 / / rw,relatime shared:7 master:1 - xfs /dev/mapper/rhel_ibm--x3650m4--02--vm--02-root rw,seclabel,attr2,inode64,noquota
	27 26 0:5 / /dev rw,nosuid shared:2 - devtmpfs devtmpfs rw,seclabel,size=16374292k,nr_inodes=4093573,mode=755
	28 27 0:17 / /dev/shm rw,nosuid,nodev shared:3 - tmpfs tmpfs rw,seclabel
	29 27 0:11 / /dev/pts rw,nosuid,noexec,relatime shared:4 - devpts devpts rw,seclabel,gid=5,mode=620,ptmxmode=000
	30 26 0:3 / /proc rw,nosuid,nodev,noexec,relatime shared:5 - proc proc rw
	31 26 0:16 / /sys rw,nosuid,nodev,noexec,relatime shared:6 - sysfs sysfs rw,seclabel
	32 31 0:19 / /sys/fs/cgroup rw,nosuid,nodev,noexec shared:8 - tmpfs tmpfs rw,seclabel,mode=755
	33 32 0:20 / /sys/fs/cgroup/systemd rw,nosuid,nodev,noexec,relatime shared:9 - cgroup cgroup rw,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd
	34 26 0:18 / /run rw,nosuid,nodev shared:22 - tmpfs tmpfs rw,seclabel,mode=755
	35 26 253:1 /tmp/A /tmp/B rw,relatime shared:7 master:1 - xfs /dev/mapper/rhel_ibm--x3650m4--02--vm--02-root rw,seclabel,attr2,inode64,noquota
	
only "/tmp/B" needs the AUTODETECTED_MOUNT logic in this case we can
rely on fsroot_mounted(). Once again, in this particular case.

Now what? Obviously we can't just add

	if (is_not_external_mount(m))
		continue;

into resolve_external_mounts(), this is not enough. What else should
we do?

Oleg.



More information about the CRIU mailing list