[systemd-commits] 2 commits - src/core

Lennart Poettering lennart at kemper.freedesktop.org
Fri Jan 23 04:50:26 PST 2015


 src/core/mount-setup.c |    4 ----
 src/core/mount.c       |   17 ++++++++++++-----
 src/core/umount.c      |   10 ++++++++--
 3 files changed, 20 insertions(+), 11 deletions(-)

New commits:
commit 874d3404cbf2363604106c8f86683db4082691ea
Author: Lennart Poettering <lennart at poettering.net>
Date:   Fri Jan 23 13:44:44 2015 +0100

    core,shutdown: don't bother with unmounting any mounts below /sys, /proc, /dev when shutting down
    
    After all, mounts below these directories are pretty much guaranteed to
    be virtual, and it's hence unnecessary to unmount them during shutdown.
    Moreover, in less-priviliged containers we might lack the rights to
    unmount them, hence don't even try.
    
    http://lists.freedesktop.org/archives/systemd-devel/2015-January/027113.html

diff --git a/src/core/mount.c b/src/core/mount.c
index 612d150..f944c02 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -378,13 +378,20 @@ static int mount_add_default_dependencies(Mount *m) {
         if (UNIT(m)->manager->running_as != SYSTEMD_SYSTEM)
                 return 0;
 
-        p = get_mount_parameters(m);
-
-        if (!p)
+        /* 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. */
+        if (path_equal(m->where, "/") ||
+            path_equal(m->where, "/usr") ||
+            path_startswith(m->where, "/proc") ||
+            path_startswith(m->where, "/sys") ||
+            path_startswith(m->where, "/dev"))
                 return 0;
 
-        if (path_equal(m->where, "/") ||
-            path_equal(m->where, "/usr"))
+        p = get_mount_parameters(m);
+        if (!p)
                 return 0;
 
         if (mount_is_network(p)) {
diff --git a/src/core/umount.c b/src/core/umount.c
index e38851d..dd7df19 100644
--- a/src/core/umount.c
+++ b/src/core/umount.c
@@ -104,10 +104,16 @@ static int mount_points_list_get(MountPoint **head) {
 
                 /* Ignore mount points we can't unmount because they
                  * are API or because we are keeping them open (like
-                 * /dev/console) */
+                 * /dev/console). Also, ignore all mounts below API
+                 * file systems, since they are likely virtual too,
+                 * and hence not worth spending time on. Also, in
+                 * unprivileged containers we might lack the rights to
+                 * unmount these things, hence don't bother. */
                 if (mount_point_is_api(p) ||
                     mount_point_ignore(p) ||
-                    path_equal(p, "/dev/console")) {
+                    path_startswith(p, "/dev") ||
+                    path_startswith(p, "/sys") ||
+                    path_startswith(p, "/proc")) {
                         free(p);
                         continue;
                 }

commit b4d5b78374e093ffb280fbfbbcfedbe68d60b956
Author: Lennart Poettering <lennart at poettering.net>
Date:   Fri Jan 23 13:44:27 2015 +0100

    mount-setup: /selinux, /cgroup, /dev/cgroup are sooo old, don't bother with them anymore

diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c
index eb9641f..5919f77 100644
--- a/src/core/mount-setup.c
+++ b/src/core/mount-setup.c
@@ -120,10 +120,6 @@ static const MountPoint mount_table[] = {
 static const char ignore_paths[] =
         /* SELinux file systems */
         "/sys/fs/selinux\0"
-        "/selinux\0"
-        /* Legacy cgroup mount points */
-        "/dev/cgroup\0"
-        "/cgroup\0"
         /* Legacy kernel file system */
         "/proc/bus/usb\0"
         /* Container bind mounts */



More information about the systemd-commits mailing list