if (!p->what)
return 0;
- if (!mount_is_bind(p) &&
- !path_equal(m->where, "/") &&
- is_device_path(p->what)) {
- r = unit_add_node_link(UNIT(m), p->what, false);
- if (r < 0)
- return r;
- }
+ if (mount_is_bind(p))
+ return 0;
+
+ if (!is_device_path(p->what))
+ return 0;
+
+ if (path_equal(m->where, "/"))
+ return 0;
+
+ r = unit_add_node_link(UNIT(m), p->what, false);
+ if (r < 0)
+ return r;
if (p->passno > 0 &&
- !mount_is_bind(p) &&
- !path_equal(m->where, "/") &&
- is_device_path(p->what) &&
UNIT(m)->manager->running_as == SYSTEMD_SYSTEM) {
char *name;
Unit *fsck;
Unit *u = UNIT(m);
int r;
- r = unit_add_exec_dependencies(u, &m->exec_context);
- if (r < 0)
- return r;
-
if (UNIT(m)->fragment_path)
m->from_fragment = true;
path_kill_slashes(m->where);
+ r = unit_add_exec_dependencies(u, &m->exec_context);
+ if (r < 0)
+ return r;
+
if (!UNIT(m)->description) {
r = unit_set_description(u, m->where);
if (r < 0)
bool delete;
char *e, *w = NULL, *o = NULL, *f = NULL;
MountParameters *p;
+ bool load_extras = false;
assert(m);
assert(what);
delete = false;
free(e);
+ if (!MOUNT(u)->where) {
+ MOUNT(u)->where = strdup(where);
+ if (!MOUNT(u)->where) {
+ r = -ENOMEM;
+ goto fail;
+ }
+ }
+
if (u->load_state == UNIT_ERROR) {
u->load_state = UNIT_LOADED;
u->load_error = 0;
- r = mount_add_extras(MOUNT(u));
- if (r < 0)
- goto fail;
+
+ /* Load in the extras later on, after we
+ * finished initialization of the unit */
+ load_extras = true;
}
}
p->passno = passno;
+ if (load_extras) {
+ r = mount_add_extras(MOUNT(u));
+ if (r < 0)
+ goto fail;
+ }
+
unit_add_to_dbus_queue(u);
return 0;