[systemd-devel] [PATCH 1/3] [RFC] automount: decouple from corresponding mount unit

Tom Gundersen teg at jklm.no
Fri Sep 13 03:55:46 PDT 2013


Also, move all the default dependency logic into core, this introduces a
functional change compared to the fstab generator:

We no longer care about the type (network or local) or options (nofail)
of filesystem corresponding to the automount, but consider an automount
unit as a local mount point which is not allowed to fail.

In the initrd the automount is unconditionally Before and RequiredBy
both initrd-root-fs.target and initrd-fs.target. In the real root the
automount is unconditionally Before and RequiredBy local-fs.target.
---
 src/core/automount.c                  | 14 ++++++++++++++
 src/fstab-generator/fstab-generator.c | 23 +++--------------------
 2 files changed, 17 insertions(+), 20 deletions(-)

diff --git a/src/core/automount.c b/src/core/automount.c
index a20d534..27d96ce 100644
--- a/src/core/automount.c
+++ b/src/core/automount.c
@@ -163,6 +163,20 @@ static int automount_add_default_dependencies(Automount *a) {
         if (UNIT(a)->manager->running_as != SYSTEMD_SYSTEM)
                 return 0;
 
+        if (in_initrd()) {
+                r = unit_add_two_dependencies_by_name(UNIT(a), UNIT_BEFORE, UNIT_REQUIRED_BY, SPECIAL_INITRD_ROOT_FS_TARGET, NULL, true);
+                if (r < 0)
+                        return r;
+
+                r = unit_add_two_dependencies_by_name(UNIT(a), UNIT_BEFORE, UNIT_REQUIRED_BY, SPECIAL_INITRD_FS_TARGET, NULL, true);
+                if (r < 0)
+                        return r;
+        } else {
+                r = unit_add_two_dependencies_by_name(UNIT(a), UNIT_BEFORE, UNIT_REQUIRED_BY, SPECIAL_LOCAL_FS_TARGET, NULL, true);
+                if (r < 0)
+                        return r;
+        }
+
         r = unit_add_two_dependencies_by_name(UNIT(a), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true);
         if (r < 0)
                 return r;
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
index 6ebe8aa..02052ea 100644
--- a/src/fstab-generator/fstab-generator.c
+++ b/src/fstab-generator/fstab-generator.c
@@ -252,17 +252,11 @@ static int add_mount(
                 fprintf(f,
                         "# Automatically generated by systemd-fstab-generator\n\n"
                         "[Unit]\n"
-                        "SourcePath=%s\n",
-                        source);
-
-                if (post)
-                        fprintf(f,
-                                "Before= %s\n",
-                                post);
-
-                fprintf(f,
+                        "SourcePath=%s\n"
+                        "\n"
                         "[Automount]\n"
                         "Where=%s\n",
+                        source,
                         where);
 
                 fflush(f);
@@ -270,17 +264,6 @@ static int add_mount(
                         log_error("Failed to write unit file %s: %m", automount_unit);
                         return -errno;
                 }
-
-                free(lnk);
-                lnk = strjoin(arg_dest, "/", post, nofail ? ".wants/" : ".requires/", automount_name, NULL);
-                if (!lnk)
-                        return log_oom();
-
-                mkdir_parents_label(lnk, 0755);
-                if (symlink(automount_unit, lnk) < 0) {
-                        log_error("Failed to create symlink %s: %m", lnk);
-                        return -errno;
-                }
         }
 
         return 0;
-- 
1.8.4



More information about the systemd-devel mailing list