At startup, mount_enumerate is called at manager startup. This creates a unit for each mount point in /proc/self/mountinfo. If no unit for the mount point has been loaded yet (which is quite possible since mount_enumerate is called early), a unit is created and set to conflict with umount.target. However, this should not happen for /, /usr and any mount point marked with x-initrd.mount.
This caused systemd to incorrectly unmount / on shutdown. --- src/core/mount.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/core/mount.c b/src/core/mount.c index 10073b5..377cf44 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -1538,9 +1538,12 @@ static int mount_add_one( if (r < 0) goto fail; - r = unit_add_dependency_by_name(u, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true); - if (r < 0) - goto fail; + if (!path_equal(where, "/") && !path_equal(where, "/usr") && + !mount_test_option(options, "x-initrd.mount")) { + r = unit_add_dependency_by_name(u, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true); + if (r < 0) + goto fail; + } unit_add_to_load_queue(u); } else { -- 1.8.3.1 _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel