]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core/mount: Don't unmount initramfs mounts 2794/head
authorJoel Holdsworth <joel.holdsworth@vcatechnology.com>
Thu, 3 Mar 2016 17:25:53 +0000 (17:25 +0000)
committerJoel Holdsworth <joel.holdsworth@vcatechnology.com>
Fri, 4 Mar 2016 15:16:34 +0000 (15:16 +0000)
A mount within /run/initramfs is indicative that the mount was
created by initramfs init and will be unmounted by initramfs
shutdown.

It is unlikely that such a mount point would even be unmountable
by the the main system, for example in the case of the root file-
system being loop-mounted from a file in a /run/initramfs mount.

src/core/mount.c
src/core/umount.c

index 93d2bd595c47af46e36b4d772a8c22aaeff0deeb..540ec5fdda08f2a8347595f07e920af28d02efe9 100644 (file)
@@ -369,7 +369,8 @@ static bool should_umount(Mount *m) {
         MountParameters *p;
 
         if (path_equal(m->where, "/") ||
-            path_equal(m->where, "/usr"))
+            path_equal(m->where, "/usr") ||
+            path_startswith(m->where, "/run/initramfs"))
                 return false;
 
         p = get_mount_parameters(m);
@@ -393,13 +394,15 @@ static int mount_add_default_dependencies(Mount *m) {
         if (UNIT(m)->manager->running_as != MANAGER_SYSTEM)
                 return 0;
 
-        /* We do not add any default dependencies to / and /usr, since
-         * they are guaranteed to stay mounted the whole time, since
-         * our system is on it. Also, don't bother with anything
-         * mounted below virtual file systems, it's also going to be
-         * virtual, and hence not worth the effort. */
+        /* We do not add any default dependencies to /, /usr or
+         * /run/initramfs/, since they are guaranteed to stay
+         * mounted the whole time, since our system is on it.
+         * Also, don't bother with anything mounted below virtual
+         * file systems, it's also going to be virtual, and hence
+         * not worth the effort. */
         if (path_equal(m->where, "/") ||
             path_equal(m->where, "/usr") ||
+            path_startswith(m->where, "/run/initramfs") ||
             path_startswith(m->where, "/proc") ||
             path_startswith(m->where, "/sys") ||
             path_startswith(m->where, "/dev"))
index b953fcc152f4d5f77d338be1feb426d43f0dbab7..c21a2be54e2eb2694357505fc7689824f1f8fa6e 100644 (file)
@@ -412,6 +412,7 @@ static int mount_points_list_umount(MountPoint **head, bool *changed, bool log_e
 #ifndef HAVE_SPLIT_USR
                     || path_equal(m->path, "/usr")
 #endif
+                    || path_startswith(m->path, "/run/initramfs")
                 )
                         continue;