X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fmount.c;h=5d5857f5af5680cdb1e97fa8f724beb900248857;hp=ac33787e61e42c8307a3386419dcc7056b566a1d;hb=cc8a7a6129145dc485c82549edd39bcb9b52fd45;hpb=11ce3427242b8b4ddf638ed5703d69041d719b4c diff --git a/src/mount.c b/src/mount.c index ac33787e6..5d5857f5a 100644 --- a/src/mount.c +++ b/src/mount.c @@ -244,7 +244,8 @@ static int mount_add_target_links(Mount *m) { noauto = !!mount_test_option(p->options, MNTOPT_NOAUTO); user = mount_test_option(p->options, "user") || mount_test_option(p->options, "users"); - handle = !!mount_test_option(p->options, "comment=systemd.mount"); + handle = !!mount_test_option(p->options, "comment=systemd.mount") || + m->meta.manager->mount_auto; automount = !!mount_test_option(p->options, "comment=systemd.automount"); if (mount_test_option(p->options, "_netdev") || @@ -265,7 +266,11 @@ static int mount_add_target_links(Mount *m) { return unit_add_two_dependencies(tu, UNIT_AFTER, UNIT_WANTS, UNIT(am), true); } else { - if (!noauto && handle) + /* Automatically add mount points that aren't natively + * configured to local-fs.target */ + if (!noauto && + handle && + !m->from_fragment) if (user || m->meta.manager->running_as == MANAGER_SYSTEM) if ((r = unit_add_dependency(tu, UNIT_WANTS, UNIT(m), true)) < 0) return r; @@ -274,6 +279,30 @@ static int mount_add_target_links(Mount *m) { } } +static int mount_add_device_links(Mount *m) { + MountParameters *p; + bool nofail, noauto; + + assert(m); + + if (m->from_fragment) + p = &m->parameters_fragment; + else if (m->from_etc_fstab) + p = &m->parameters_etc_fstab; + else + return 0; + + if (!p->what || path_equal(m->where, "/")) + return 0; + + noauto = !!mount_test_option(p->options, MNTOPT_NOAUTO); + nofail = !!mount_test_option(p->options, "nofail"); + + return unit_add_node_link(UNIT(m), p->what, + !noauto && nofail && + UNIT(m)->meta.manager->running_as == MANAGER_SYSTEM); +} + static int mount_add_default_dependencies(Mount *m) { int r; @@ -361,9 +390,8 @@ static int mount_load(Unit *u) { else if (m->from_proc_self_mountinfo && m->parameters_proc_self_mountinfo.what) what = m->parameters_proc_self_mountinfo.what; - if (what) - if ((r = unit_add_node_link(u, what, u->meta.manager->running_as == MANAGER_SYSTEM)) < 0) - return r; + if ((r = mount_add_device_links(m)) < 0) + return r; if ((r = mount_add_mount_links(m)) < 0) return r; @@ -1286,6 +1314,7 @@ static int mount_load_etc_fstab(Manager *m) { what, pri, !!mount_test_option(me->mnt_opts, MNTOPT_NOAUTO), + !!mount_test_option(me->mnt_opts, "nofail"), !!mount_test_option(me->mnt_opts, "comment=systemd.swapon"), false); } else