[systemd-devel] [PATCH 3/3] mount: x-initrd.mount should not conflict with umount.target
Tom Gundersen
teg at jklm.no
Wed Aug 21 04:53:12 PDT 2013
These mounts were mounted in the initrd and should be unmounted there as well.
Currently, we will still attempt to umount these in the final kill spree, but
we should consider avoiding that too.
---
src/core/mount.c | 26 +++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)
diff --git a/src/core/mount.c b/src/core/mount.c
index 566b3f6..fcca677 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -448,6 +448,21 @@ static int mount_add_quota_links(Mount *m) {
return 0;
}
+static bool should_umount(Mount *m) {
+ MountParameters *p;
+
+ if (path_equal(m->where, "/") ||
+ path_equal(m->where, "/usr"))
+ return false;
+
+ p = get_mount_parameters(m);
+ if (p && mount_test_option(p->options, "x-initrd.mount") &&
+ !in_initrd())
+ return false;
+
+ return true;
+}
+
static int mount_add_default_dependencies(Mount *m) {
const char *after, *after2, *online;
MountParameters *p;
@@ -492,9 +507,11 @@ static int mount_add_default_dependencies(Mount *m) {
return r;
}
- r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true);
- if (r < 0)
- return r;
+ if (should_umount(m)) {
+ r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true);
+ if (r < 0)
+ return r;
+ }
return 0;
}
@@ -1554,8 +1571,7 @@ static int mount_add_one(
if (r < 0)
goto fail;
- if (!path_equal(where, "/") &&
- !path_equal(where, "/usr")) {
+ if (should_umount(MOUNT(u))) {
r = unit_add_dependency_by_name(u, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true);
if (r < 0)
goto fail;
--
1.8.3.4
More information about the systemd-devel
mailing list