Zbigniew Jędrzejewski-Szmek 794d16
From 47c666095e4ed827bbb15b6e58b760dc5dcd97ae Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 794d16
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Zbigniew Jędrzejewski-Szmek 794d16
Date: Sat, 5 Oct 2013 13:09:43 -0400
Zbigniew Jędrzejewski-Szmek 794d16
Subject: [PATCH] core: do not add "what" to RequiresMountsFor for network
Zbigniew Jędrzejewski-Szmek 794d16
 mounts
Zbigniew Jędrzejewski-Szmek 794d16
Zbigniew Jędrzejewski-Szmek 794d16
For cifs mount like //server/share, we would get
Zbigniew Jędrzejewski-Szmek 794d16
RequiresMountsFor=/server/share, which probably isn't
Zbigniew Jędrzejewski-Szmek 794d16
harmful, but quite confusing.
Zbigniew Jędrzejewski-Szmek 794d16
Zbigniew Jędrzejewski-Szmek 794d16
Unfortunately a bunch of static functions had to be moved
Zbigniew Jędrzejewski-Szmek 794d16
up, but patch is really one line.
Zbigniew Jędrzejewski-Szmek 794d16
---
Zbigniew Jędrzejewski-Szmek 794d16
 src/core/mount.c | 137 ++++++++++++++++++++++++++++---------------------------
Zbigniew Jędrzejewski-Szmek 794d16
 1 file changed, 70 insertions(+), 67 deletions(-)
Zbigniew Jędrzejewski-Szmek 794d16
Zbigniew Jędrzejewski-Szmek 794d16
diff --git a/src/core/mount.c b/src/core/mount.c
Zbigniew Jędrzejewski-Szmek 794d16
index db055f0..70cd372 100644
Zbigniew Jędrzejewski-Szmek 794d16
--- a/src/core/mount.c
Zbigniew Jędrzejewski-Szmek 794d16
+++ b/src/core/mount.c
Zbigniew Jędrzejewski-Szmek 794d16
@@ -59,6 +59,72 @@ static const UnitActiveState state_translation_table[_MOUNT_STATE_MAX] = {
Zbigniew Jędrzejewski-Szmek 794d16
         [MOUNT_FAILED] = UNIT_FAILED
Zbigniew Jędrzejewski-Szmek 794d16
 };
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
+static char* mount_test_option(const char *haystack, const char *needle) {
Zbigniew Jędrzejewski-Szmek 794d16
+        struct mntent me = { .mnt_opts = (char*) haystack };
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        assert(needle);
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        /* Like glibc's hasmntopt(), but works on a string, not a
Zbigniew Jędrzejewski-Szmek 794d16
+         * struct mntent */
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        if (!haystack)
Zbigniew Jędrzejewski-Szmek 794d16
+                return NULL;
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        return hasmntopt(&me, needle);
Zbigniew Jędrzejewski-Szmek 794d16
+}
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+static bool mount_is_network(MountParameters *p) {
Zbigniew Jędrzejewski-Szmek 794d16
+        assert(p);
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        if (mount_test_option(p->options, "_netdev"))
Zbigniew Jędrzejewski-Szmek 794d16
+                return true;
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        if (p->fstype && fstype_is_network(p->fstype))
Zbigniew Jędrzejewski-Szmek 794d16
+                return true;
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        return false;
Zbigniew Jędrzejewski-Szmek 794d16
+}
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+static bool mount_is_bind(MountParameters *p) {
Zbigniew Jędrzejewski-Szmek 794d16
+        assert(p);
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        if (mount_test_option(p->options, "bind"))
Zbigniew Jędrzejewski-Szmek 794d16
+                return true;
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        if (p->fstype && streq(p->fstype, "bind"))
Zbigniew Jędrzejewski-Szmek 794d16
+                return true;
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        if (mount_test_option(p->options, "rbind"))
Zbigniew Jędrzejewski-Szmek 794d16
+                return true;
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        if (p->fstype && streq(p->fstype, "rbind"))
Zbigniew Jędrzejewski-Szmek 794d16
+                return true;
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        return false;
Zbigniew Jędrzejewski-Szmek 794d16
+}
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+static bool mount_is_auto(MountParameters *p) {
Zbigniew Jędrzejewski-Szmek 794d16
+        assert(p);
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        return !mount_test_option(p->options, "noauto");
Zbigniew Jędrzejewski-Szmek 794d16
+}
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+static bool needs_quota(MountParameters *p) {
Zbigniew Jędrzejewski-Szmek 794d16
+        assert(p);
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        if (mount_is_network(p))
Zbigniew Jędrzejewski-Szmek 794d16
+                return false;
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        if (mount_is_bind(p))
Zbigniew Jędrzejewski-Szmek 794d16
+                return false;
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
+        return mount_test_option(p->options, "usrquota") ||
Zbigniew Jędrzejewski-Szmek 794d16
+                mount_test_option(p->options, "grpquota") ||
Zbigniew Jędrzejewski-Szmek 794d16
+                mount_test_option(p->options, "quota") ||
Zbigniew Jędrzejewski-Szmek 794d16
+                mount_test_option(p->options, "usrjquota") ||
Zbigniew Jędrzejewski-Szmek 794d16
+                mount_test_option(p->options, "grpjquota");
Zbigniew Jędrzejewski-Szmek 794d16
+}
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
 static void mount_init(Unit *u) {
Zbigniew Jędrzejewski-Szmek 794d16
         Mount *m = MOUNT(u);
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
@@ -182,7 +248,10 @@ static int mount_add_mount_links(Mount *m) {
Zbigniew Jędrzejewski-Szmek 794d16
          * for the source path (if this is a bind mount) to be
Zbigniew Jędrzejewski-Szmek 794d16
          * available. */
Zbigniew Jędrzejewski-Szmek 794d16
         pm = get_mount_parameters_fragment(m);
Zbigniew Jędrzejewski-Szmek 794d16
-        if (pm && pm->what && path_is_absolute(pm->what)) {
Zbigniew Jędrzejewski-Szmek 794d16
+        if (pm && pm->what &&
Zbigniew Jędrzejewski-Szmek 794d16
+            path_is_absolute(pm->what) &&
Zbigniew Jędrzejewski-Szmek 794d16
+            !mount_is_network(pm)) {
Zbigniew Jędrzejewski-Szmek 794d16
+
Zbigniew Jędrzejewski-Szmek 794d16
                 r = unit_require_mounts_for(UNIT(m), pm->what);
Zbigniew Jędrzejewski-Szmek 794d16
                 if (r < 0)
Zbigniew Jędrzejewski-Szmek 794d16
                         return r;
Zbigniew Jędrzejewski-Szmek 794d16
@@ -214,72 +283,6 @@ static int mount_add_mount_links(Mount *m) {
Zbigniew Jędrzejewski-Szmek 794d16
         return 0;
Zbigniew Jędrzejewski-Szmek 794d16
 }
Zbigniew Jędrzejewski-Szmek 794d16
 
Zbigniew Jędrzejewski-Szmek 794d16
-static char* mount_test_option(const char *haystack, const char *needle) {
Zbigniew Jędrzejewski-Szmek 794d16
-        struct mntent me = { .mnt_opts = (char*) haystack };
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-        assert(needle);
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-        /* Like glibc's hasmntopt(), but works on a string, not a
Zbigniew Jędrzejewski-Szmek 794d16
-         * struct mntent */
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-        if (!haystack)
Zbigniew Jędrzejewski-Szmek 794d16
-                return NULL;
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-        return hasmntopt(&me, needle);
Zbigniew Jędrzejewski-Szmek 794d16
-}
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-static bool mount_is_network(MountParameters *p) {
Zbigniew Jędrzejewski-Szmek 794d16
-        assert(p);
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-        if (mount_test_option(p->options, "_netdev"))
Zbigniew Jędrzejewski-Szmek 794d16
-                return true;
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-        if (p->fstype && fstype_is_network(p->fstype))
Zbigniew Jędrzejewski-Szmek 794d16
-                return true;
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-        return false;
Zbigniew Jędrzejewski-Szmek 794d16
-}
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-static bool mount_is_bind(MountParameters *p) {
Zbigniew Jędrzejewski-Szmek 794d16
-        assert(p);
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-        if (mount_test_option(p->options, "bind"))
Zbigniew Jędrzejewski-Szmek 794d16
-                return true;
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-        if (p->fstype && streq(p->fstype, "bind"))
Zbigniew Jędrzejewski-Szmek 794d16
-                return true;
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-        if (mount_test_option(p->options, "rbind"))
Zbigniew Jędrzejewski-Szmek 794d16
-                return true;
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-        if (p->fstype && streq(p->fstype, "rbind"))
Zbigniew Jędrzejewski-Szmek 794d16
-                return true;
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-        return false;
Zbigniew Jędrzejewski-Szmek 794d16
-}
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-static bool mount_is_auto(MountParameters *p) {
Zbigniew Jędrzejewski-Szmek 794d16
-        assert(p);
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-        return !mount_test_option(p->options, "noauto");
Zbigniew Jędrzejewski-Szmek 794d16
-}
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-static bool needs_quota(MountParameters *p) {
Zbigniew Jędrzejewski-Szmek 794d16
-        assert(p);
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-        if (mount_is_network(p))
Zbigniew Jędrzejewski-Szmek 794d16
-                return false;
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-        if (mount_is_bind(p))
Zbigniew Jędrzejewski-Szmek 794d16
-                return false;
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
-        return mount_test_option(p->options, "usrquota") ||
Zbigniew Jędrzejewski-Szmek 794d16
-                mount_test_option(p->options, "grpquota") ||
Zbigniew Jędrzejewski-Szmek 794d16
-                mount_test_option(p->options, "quota") ||
Zbigniew Jędrzejewski-Szmek 794d16
-                mount_test_option(p->options, "usrjquota") ||
Zbigniew Jędrzejewski-Szmek 794d16
-                mount_test_option(p->options, "grpjquota");
Zbigniew Jędrzejewski-Szmek 794d16
-}
Zbigniew Jędrzejewski-Szmek 794d16
-
Zbigniew Jędrzejewski-Szmek 794d16
 static int mount_add_device_links(Mount *m) {
Zbigniew Jędrzejewski-Szmek 794d16
         MountParameters *p;
Zbigniew Jędrzejewski-Szmek 794d16
         bool device_wants_mount = false;