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
This commit is contained in:
+12
-5
@@ -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)) {
|
||||
|
||||
+8
-2
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user