nspawn: mount_sysfs(): Unconditionally mkdir /sys/fs/cgroup
authorLuke Shumaker <lukeshu@parabola.nu>
Thu, 1 Jun 2017 17:59:20 +0000 (13:59 -0400)
committerLuke Shumaker <lukeshu@parabola.nu>
Fri, 20 Jul 2018 16:12:03 +0000 (12:12 -0400)
commit677a72cd3efdfde9d544b2d1fe62f352d6d8472c
tree71c644e7308224e128d305f0c7541981ffadf1ac
parentf09e86bcaa012d64addd2314fa6054657a02f64c
nspawn: mount_sysfs(): Unconditionally mkdir /sys/fs/cgroup

Currently, mount_sysfs() only creates /sys/fs/cgroup if cg_ns_supported().
The comment explains that we need to "Create mountpoint for
cgroups. Otherwise we are not allowed since we remount /sys read-only.";
that is: that we need to do it now, rather than later.  However, the
comment doesn't do anything to explain why we only need to do this if
cg_ns_supported(); shouldn't we _always_ need to do it?

The answer is that if !use_cgns, then this was already done by the outer
child, so mount_sysfs() only needs to do it if use_cgns.  Now,
mount_sysfs() doesn't know whether use_cgns, but !cg_ns_supported() implies
!use_cgns, so we can optimize" the case where we _know_ !use_cgns, and deal
with a no-op mkdir_p() in the false-positive where cgns_supported() but
!use_cgns.

But is it really much of an optimization?  We're potentially spending an
access(2) (cg_ns_supported() could be cached from a previous call) to
potentially save an lstat(2) and mkdir(2); and all of them are on virtual
fileystems, so they should all be pretty cheap.

So, simplify and drop the conditional.  It's a dubious optimization that
requires more text to explain than it's worth.
src/nspawn/nspawn-mount.c