chiark / gitweb /
swap: create .wants symlink to 'auto' swap devices
[elogind.git] / src / fstab-generator / fstab-generator.c
index 6ebe8aa..b73dfa4 100644 (file)
@@ -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;
 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);
         int r, pri = -1;
 
         assert(what);
@@ -77,6 +78,8 @@ static int add_swap(const char *what, struct mntent *me) {
                 return pri;
         }
 
                 return pri;
         }
 
+        noauto = !!hasmntopt(me, "noauto");
+
         name = unit_name_from_path(what, ".swap");
         if (!name)
                 return log_oom();
         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"
         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);
                 "[Swap]\n"
                 "What=%s\n",
                 what);
@@ -114,6 +116,18 @@ static int add_swap(const char *what, struct mntent *me) {
                 return -errno;
         }
 
                 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;
 }
 
         return 0;
 }