summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/mount.c110
1 files changed, 69 insertions, 41 deletions
diff --git a/src/core/mount.c b/src/core/mount.c
index 6b358862ea..5364b5dd7c 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -537,68 +537,96 @@ static int mount_verify(Mount *m) {
return 0;
}
-static int mount_load(Unit *u) {
- Mount *m = MOUNT(u);
+static int mount_add_extras(Mount *m) {
+ Unit *u = UNIT(m);
int r;
- assert(u);
- assert(u->load_state == UNIT_STUB);
-
- if ((r = unit_load_fragment_and_dropin_optional(u)) < 0)
+ r = unit_add_exec_dependencies(u, &m->exec_context);
+ if (r < 0)
return r;
- /* This is a new unit? Then let's add in some extras */
- if (u->load_state == UNIT_LOADED) {
- if ((r = unit_add_exec_dependencies(u, &m->exec_context)) < 0)
- return r;
-
- if (UNIT(m)->fragment_path)
- m->from_fragment = true;
+ if (UNIT(m)->fragment_path)
+ m->from_fragment = true;
+ if (!m->where) {
+ m->where = unit_name_to_path(u->id);
if (!m->where)
- if (!(m->where = unit_name_to_path(u->id)))
- return -ENOMEM;
-
- path_kill_slashes(m->where);
+ return -ENOMEM;
+ }
- if (!UNIT(m)->description)
- if ((r = unit_set_description(u, m->where)) < 0)
- return r;
+ path_kill_slashes(m->where);
- if ((r = mount_add_device_links(m)) < 0)
+ if (!UNIT(m)->description) {
+ r = unit_set_description(u, m->where);
+ if (r < 0)
return r;
+ }
- if ((r = mount_add_mount_links(m)) < 0)
- return r;
+ r = mount_add_device_links(m);
+ if (r < 0)
+ return r;
- if ((r = mount_add_socket_links(m)) < 0)
- return r;
+ r = mount_add_mount_links(m);
+ if (r < 0)
+ return r;
- if ((r = mount_add_swap_links(m)) < 0)
- return r;
+ r = mount_add_socket_links(m);
+ if (r < 0)
+ return r;
- if ((r = mount_add_path_links(m)) < 0)
- return r;
+ r = mount_add_swap_links(m);
+ if (r < 0)
+ return r;
- r = mount_add_requires_mounts_links(m);
- if (r < 0)
- return r;
+ r = mount_add_path_links(m);
+ if (r < 0)
+ return r;
- if ((r = mount_add_automount_links(m)) < 0)
- return r;
+ r = mount_add_requires_mounts_links(m);
+ if (r < 0)
+ return r;
+
+ r = mount_add_automount_links(m);
+ if (r < 0)
+ return r;
+
+ r = mount_add_quota_links(m);
+ if (r < 0)
+ return r;
- r = mount_add_quota_links(m);
+ if (UNIT(m)->default_dependencies) {
+ r = mount_add_default_dependencies(m);
if (r < 0)
return r;
+ }
- if (UNIT(m)->default_dependencies)
- if ((r = mount_add_default_dependencies(m)) < 0)
- return r;
+ r = unit_add_default_cgroups(u);
+ if (r < 0)
+ return r;
- if ((r = unit_add_default_cgroups(u)) < 0)
- return r;
+ r = mount_fix_timeouts(m);
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
+static int mount_load(Unit *u) {
+ Mount *m = MOUNT(u);
+ int r;
+
+ assert(u);
+ assert(u->load_state == UNIT_STUB);
+
+ r = unit_load_fragment_and_dropin_optional(u);
+ if (r < 0)
+ return r;
- mount_fix_timeouts(m);
+ /* This is a new unit? Then let's add in some extras */
+ if (u->load_state == UNIT_LOADED) {
+ r = mount_add_extras(m);
+ if (r < 0)
+ return r;
}
return mount_verify(m);