summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/mount.c17
-rw-r--r--src/core/umount.c10
2 files changed, 20 insertions, 7 deletions
diff --git a/src/core/mount.c b/src/core/mount.c
index 612d15077b..f944c02e2b 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 e38851dc12..dd7df194de 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;
}