summaryrefslogtreecommitdiff
path: root/src/fstab-generator/fstab-generator.c
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2014-11-26 10:36:52 -0500
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2014-11-26 15:17:07 -0500
commit5607d856b8606ba75446a07ab5e9048753e1d7a6 (patch)
tree700fa0e14d4fc1ab28057fb04643c440cdda32e4 /src/fstab-generator/fstab-generator.c
parentcb6531bee6e6f66c3a9d85b24fed68fae7fad6ad (diff)
swap: restore support for nofail
systemd stops adding automatic dependencies on swap.target to swap units. If a dependency is required, it has to be added by unit configuration. fstab-generator did that already, except that now it is modified to create a Requires or Wants type dependency, depending on whether nofail is specified in /etc/fstab. This makes .swap units obey the nofail/noauto options more or less the same as .mount units. Documentation is extended to clarify that, and to make systemd.mount(5) and system.swap(5) more similar. The gist is not changed, because current behaviour actually matches existing documentation. https://bugs.freedesktop.org/show_bug.cgi?id=86488
Diffstat (limited to 'src/fstab-generator/fstab-generator.c')
-rw-r--r--src/fstab-generator/fstab-generator.c27
1 files changed, 16 insertions, 11 deletions
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");