X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fmount.c;h=14f4863dc6b410f9f4d1f5a99dacc3d02c7d1d1f;hb=774de5a97fe69da822fde77b88af8d970ab5d0c6;hp=db793f2b5d9e14c62af26f3909ff8ca8060471a3;hpb=63a8b2f947ad77c464acac475be84682065a6522;p=elogind.git diff --git a/src/core/mount.c b/src/core/mount.c index db793f2b5..14f4863dc 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -352,18 +352,20 @@ static int mount_add_device_links(Mount *m) { 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; @@ -545,10 +547,6 @@ static int mount_add_extras(Mount *m) { 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; @@ -560,6 +558,10 @@ static int mount_add_extras(Mount *m) { 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) @@ -1406,6 +1408,7 @@ static int mount_add_one( bool delete; char *e, *w = NULL, *o = NULL, *f = NULL; MountParameters *p; + bool load_extras = false; assert(m); assert(what); @@ -1456,12 +1459,21 @@ static int mount_add_one( 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; } } @@ -1492,6 +1504,12 @@ static int mount_add_one( 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;