diff options
Diffstat (limited to 'src/fstab-generator')
-rw-r--r-- | src/fstab-generator/fstab-generator.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c index 6ebe8aa673..b73dfa4899 100644 --- a/src/fstab-generator/fstab-generator.c +++ b/src/fstab-generator/fstab-generator.c @@ -66,6 +66,7 @@ static int mount_find_pri(struct mntent *me, int *ret) { static int add_swap(const char *what, struct mntent *me) { _cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL, *device = NULL; _cleanup_fclose_ FILE *f = NULL; + bool noauto; int r, pri = -1; assert(what); @@ -77,6 +78,8 @@ static int add_swap(const char *what, struct mntent *me) { return pri; } + noauto = !!hasmntopt(me, "noauto"); + name = unit_name_from_path(what, ".swap"); if (!name) return log_oom(); @@ -97,8 +100,7 @@ static int add_swap(const char *what, struct mntent *me) { fprintf(f, "# Automatically generated by systemd-fstab-generator\n\n" "[Unit]\n" - "SourcePath=/etc/fstab\n" - "\n" + "SourcePath=/etc/fstab\n\n" "[Swap]\n" "What=%s\n", what); @@ -114,6 +116,18 @@ static int add_swap(const char *what, struct mntent *me) { return -errno; } + if (!noauto) { + lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET ".wants/", name, NULL); + if (!lnk) + return log_oom(); + + mkdir_parents_label(lnk, 0755); + if (symlink(unit, lnk) < 0) { + log_error("Failed to create symlink %s: %m", lnk); + return -errno; + } + } + return 0; } |