diff options
-rw-r--r-- | man/systemd.mount.xml | 37 | ||||
-rw-r--r-- | man/systemd.swap.xml | 40 | ||||
-rw-r--r-- | src/core/swap.c | 16 | ||||
-rw-r--r-- | src/fstab-generator/fstab-generator.c | 27 |
4 files changed, 70 insertions, 50 deletions
diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml index ba841c3bab..6d8eae6a93 100644 --- a/man/systemd.mount.xml +++ b/man/systemd.mount.xml @@ -124,7 +124,7 @@ </refsect1> <refsect1> - <title><filename>/etc/fstab</filename></title> + <title><filename>fstab</filename></title> <para>Mount units may either be configured via unit files, or via <filename>/etc/fstab</filename> (see @@ -142,8 +142,7 @@ <para>When reading <filename>/etc/fstab</filename> a few special mount options are understood by systemd which influence how dependencies are created for mount - points from <filename>/etc/fstab</filename>. systemd - will create a dependency of type + points. systemd will create a dependency of type <option>Wants</option> or <option>Requires</option> (see option <option>nofail</option> below), from either <filename>local-fs.target</filename> or @@ -181,26 +180,13 @@ </varlistentry> <varlistentry> - <term><option>nofail</option></term> - <term><option>fail</option></term> - - <listitem><para>With <option>nofail</option> this - mount will be only wanted, not required, by the - <filename>local-fs.target</filename>. This means - that the boot will continue even if this mount - point is not mounted successfully. Option - <option>fail</option> has the opposite meaning and - is the default.</para> - </listitem> - </varlistentry> - - <varlistentry> <term><option>noauto</option></term> <term><option>auto</option></term> <listitem><para>With <option>noauto</option>, this mount will not be added as a dependency for - <filename>local-fs.target</filename>. This means + <filename>local-fs.target</filename> or + <filename>remote-fs.target</filename>. This means that it will not be mounted automatically during boot, unless it is pulled in by some other unit. Option <option>auto</option> has the @@ -209,6 +195,21 @@ </varlistentry> <varlistentry> + <term><option>nofail</option></term> + <term><option>fail</option></term> + + <listitem><para>With <option>nofail</option> this + mount will be only wanted, not required, by + <filename>local-fs.target</filename> or + <filename>remote-fs.target</filename>. This means + that the boot will continue even if this mount + point is not mounted successfully. Option + <option>fail</option> has the opposite meaning and + is the default.</para> + </listitem> + </varlistentry> + + <varlistentry> <term><option>x-initrd.mount</option></term> <listitem><para>An additional filesystem to be diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml index 44c16e7bcc..1155758e28 100644 --- a/man/systemd.swap.xml +++ b/man/systemd.swap.xml @@ -117,12 +117,40 @@ <filename>/etc/fstab</filename> and a unit file, the configuration in the latter takes precedence.</para> - <para>Unless the <option>noauto</option> option is set - for them all swap units configured in - <filename>/etc/fstab</filename> are also added as - requirements to <filename>swap.target</filename>, so - that they are waited for and activated during - boot.</para> + <para>When reading <filename>/etc/fstab</filename> a + few special options are understood by systemd which + influence how dependencies are created for swap + units.</para> + + <variablelist class='fstab-options'> + <varlistentry> + <term><option>noauto</option></term> + <term><option>auto</option></term> + + <listitem><para>With <option>noauto</option> the + swap unit will not be added as a dependency for + <filename>swap.target</filename>. This means that + it will not be activated automatically during + boot, unless it is pulled in by some other + unit. Option <option>auto</option> has the + opposite meaning and is the default.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><option>nofail</option></term> + <term><option>fail</option></term> + + <listitem><para>With <option>nofail</option> the + swap unit will be only wanted, not required by + <filename>swap.target</filename>. This means that + the boot will continue even if this swap device is + not activated successfully. Option + <option>fail</option> has the opposite meaning and + is the default.</para> + </listitem> + </varlistentry> + </variablelist> </refsect1> <refsect1> diff --git a/src/core/swap.c b/src/core/swap.c index 0a1cc80936..e509a633d0 100644 --- a/src/core/swap.c +++ b/src/core/swap.c @@ -209,8 +209,6 @@ static int swap_add_device_links(Swap *s) { } static int swap_add_default_dependencies(Swap *s) { - int r; - assert(s); if (UNIT(s)->manager->running_as != SYSTEMD_SYSTEM) @@ -219,19 +217,7 @@ static int swap_add_default_dependencies(Swap *s) { if (detect_container(NULL) > 0) return 0; - r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true); - if (r < 0) - return r; - - if (!s->from_fragment) - /* The swap unit can either be for an alternative device name, in which - * case we don't need to add the dependency on swap.target because this unit - * is following a different unit which will have this dependency added, - * or it can be derived from /proc/swaps, in which case it was started - * manually, and should not become a dependency of swap.target. */ - return 0; - - return unit_add_two_dependencies_by_name_inverse(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SWAP_TARGET, NULL, true); + return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true); } static int swap_verify(Swap *s) { diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c index af45c25400..14e664236e 100644 --- a/src/fstab-generator/fstab-generator.c +++ b/src/fstab-generator/fstab-generator.c @@ -74,11 +74,14 @@ static int mount_find_pri(struct mntent *me, int *ret) { return 1; } -static int add_swap(const char *what, struct mntent *me) { +static int add_swap( + const char *what, + struct mntent *me, + bool noauto, + bool nofail) { + _cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL; _cleanup_fclose_ FILE *f = NULL; - - bool noauto; int r, pri = -1; assert(what); @@ -95,8 +98,6 @@ static int add_swap(const char *what, struct mntent *me) { return r; } - noauto = !!hasmntopt(me, "noauto"); - name = unit_name_from_path(what, ".swap"); if (!name) return log_oom(); @@ -143,7 +144,8 @@ static int add_swap(const char *what, struct mntent *me) { return r; if (!noauto) { - lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET ".wants/", name, NULL); + lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET, + nofail ? ".wants/" : ".requires/", name, NULL); if (!lnk) return log_oom(); @@ -357,6 +359,7 @@ static int parse_fstab(bool initrd) { while ((me = getmntent(f))) { _cleanup_free_ char *where = NULL, *what = NULL; + bool noauto, nofail; int k; if (initrd && !mount_in_initrd(me)) @@ -378,16 +381,18 @@ static int parse_fstab(bool initrd) { if (is_path(where)) path_kill_slashes(where); - log_debug("Found entry what=%s where=%s type=%s", what, where, me->mnt_type); + noauto = !!hasmntopt(me, "noauto"); + nofail = !!hasmntopt(me, "nofail"); + log_debug("Found entry what=%s where=%s type=%s nofail=%s noauto=%s", + what, where, me->mnt_type, + yes_no(noauto), yes_no(nofail)); if (streq(me->mnt_type, "swap")) - k = add_swap(what, me); + k = add_swap(what, me, noauto, nofail); else { - bool noauto, nofail, automount; + bool automount; const char *post; - noauto = !!hasmntopt(me, "noauto"); - nofail = !!hasmntopt(me, "nofail"); automount = hasmntopt(me, "comment=systemd.automount") || hasmntopt(me, "x-systemd.automount"); |