Commit 2edd4434 authored by Lennart Poettering's avatar Lennart Poettering
Browse files

mount: add automatic start ordering dependencies for mounts

parent 21d21ea4
......@@ -146,6 +146,23 @@ static int automount_add_mount_links(Automount *a) {
return 0;
}
static int automount_add_default_dependencies(Automount *a) {
int r;
assert(a);
if (a->meta.manager->running_as == MANAGER_SYSTEM) {
if ((r = unit_add_dependency_by_name(UNIT(a), UNIT_AFTER, SPECIAL_SYSINIT_TARGET, NULL, true)) < 0)
return r;
if ((r = unit_add_two_dependencies_by_name(UNIT(a), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true)) < 0)
return r;
}
return 0;
}
static int automount_verify(Automount *a) {
bool b;
char *e;
......@@ -201,9 +218,8 @@ static int automount_load(Unit *u) {
if ((r = unit_add_dependency(u, UNIT_BEFORE, UNIT(a->mount), true)) < 0)
return r;
if (a->meta.default_dependencies &&
a->meta.manager->running_as == MANAGER_SYSTEM)
if ((r = unit_add_two_dependencies_by_name(UNIT(a), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true)) < 0)
if (a->meta.default_dependencies)
if ((r = automount_add_default_dependencies(a)) < 0)
return r;
}
......
......@@ -274,6 +274,24 @@ static int mount_add_target_links(Mount *m) {
}
}
static int mount_add_default_dependencies(Mount *m) {
int r;
assert(m);
if (m->meta.manager->running_as == MANAGER_SYSTEM) {
if ((r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, SPECIAL_SYSINIT_TARGET, NULL, true)) < 0)
return r;
if (!path_equal(m->where, "/"))
if ((r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true)) < 0)
return r;
}
return 0;
}
static int mount_verify(Mount *m) {
bool b;
char *e;
......@@ -368,10 +386,8 @@ static int mount_load(Unit *u) {
if ((r = unit_add_default_cgroup(u)) < 0)
return r;
if (m->meta.default_dependencies &&
m->meta.manager->running_as == MANAGER_SYSTEM &&
!path_equal(m->where, "/"))
if ((r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true)) < 0)
if (m->meta.default_dependencies)
if ((r = mount_add_default_dependencies(m)) < 0)
return r;
}
......
......@@ -120,6 +120,24 @@ static int swap_add_target_links(Swap *s) {
return unit_add_dependency(UNIT(s), UNIT_BEFORE, tu, true);
}
static int swap_add_default_dependencies(Swap *s) {
int r;
assert(s);
if (s->meta.manager->running_as == MANAGER_SYSTEM) {
if ((r = unit_add_dependency_by_name(UNIT(s), UNIT_AFTER, SPECIAL_SYSINIT_TARGET, NULL, true)) < 0)
return r;
/* Note that by default we don't disable swap devices
* on shutdown. i.e. there is no umount.target
* conflicts here. */
}
return 0;
}
static int swap_verify(Swap *s) {
bool b;
char *e;
......@@ -185,6 +203,10 @@ static int swap_load(Unit *u) {
if ((r = swap_add_target_links(s)) < 0)
return r;
if (s->meta.default_dependencies)
if ((r = swap_add_default_dependencies(s)) < 0)
return r;
}
return swap_verify(s);
......
......@@ -7,7 +7,7 @@
[Unit]
Description=Huge Pages File System Automount Point
Before=sysinit.target
DefaultDependencies=no
[Automount]
Where=/dev/hugepages
......@@ -7,6 +7,7 @@
[Unit]
Description=Huge Pages File System
DefaultDependencies=no
[Mount]
What=hugetlbfs
......
......@@ -7,7 +7,7 @@
[Unit]
Description=POSIX Message Queue File System Automount Point
Before=sysinit.target
DefaultDependencies=no
[Automount]
Where=/dev/mqueue
......@@ -7,6 +7,7 @@
[Unit]
Description=POSIX Message Queue File System
DefaultDependencies=no
[Mount]
What=mqueue
......
......@@ -7,7 +7,7 @@
[Unit]
Description=Arbitrary Executable File Formats File System Automount Point
Before=sysinit.target
DefaultDependencies=no
[Automount]
Where=/proc/sys/fs/binfmt_misc
......@@ -7,6 +7,7 @@
[Unit]
Description=Arbitrary Executable File Formats File System
DefaultDependencies=no
[Mount]
What=binfmt_misc
......
......@@ -7,7 +7,7 @@
[Unit]
Description=Debug File System Automount Point
Before=sysinit.target
DefaultDependencies=no
[Automount]
Where=/sys/kernel/debug
......@@ -7,6 +7,7 @@
[Unit]
Description=Debug File System
DefaultDependencies=no
[Mount]
What=debugfs
......
......@@ -7,7 +7,7 @@
[Unit]
Description=Security File System Automount Point
Before=sysinit.target
DefaultDependencies=no
[Automount]
Where=/sys/kernel/security
......@@ -7,6 +7,7 @@
[Unit]
Description=Security File System
DefaultDependencies=no
[Mount]
What=securityfs
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment