chiark / gitweb /
keymap: Tolerate invalid entries in keymaps
[elogind.git] / src / core / mount.c
index 66ef0cd25c3714bee713c738d7bda7483c46b511..e1c240e31b0e1ca43b79f13b31cdc061d79cdde2 100644 (file)
@@ -352,16 +352,20 @@ static int mount_add_device_links(Mount *m) {
         if (!p->what)
                 return 0;
 
-        if (!mount_is_bind(p) &&
-            !path_equal(m->where, "/")) {
-                r = unit_add_node_link(UNIT(m), p->what, false);
-                if (r < 0)
-                        return r;
-        }
+        if (mount_is_bind(p))
+                return 0;
+
+        if (!is_device_path(p->what))
+                return 0;
+
+        if (path_equal(m->where, "/"))
+                return 0;
+
+        r = unit_add_node_link(UNIT(m), p->what, false);
+        if (r < 0)
+                return r;
 
         if (p->passno > 0 &&
-            !mount_is_bind(p) &&
-            !path_equal(m->where, "/") &&
             UNIT(m)->manager->running_as == SYSTEMD_SYSTEM) {
                 char *name;
                 Unit *fsck;
@@ -960,7 +964,7 @@ static void mount_enter_mounting(Mount *m) {
         mkdir_p_label(m->where, m->directory_mode);
 
         if (dir_is_empty(m->where) <= 0)
-                log_notice("%s: Directory %s to mount over is not empty, ignoring. (To see the over-mounted files, please manually mount the underlying file system to a secondary location.)", m->meta.id, m->where);
+                log_notice("%s: Directory %s to mount over is not empty, mounting anyway. (To see the over-mounted files, please manually mount the underlying file system to a secondary location.)", m->meta.id, m->where);
 
         /* Create the source directory for bind-mounts if needed */
         p = get_mount_parameters_fragment(m);
@@ -1404,6 +1408,7 @@ static int mount_add_one(
         bool delete;
         char *e, *w = NULL, *o = NULL, *f = NULL;
         MountParameters *p;
+        bool load_extras = false;
 
         assert(m);
         assert(what);
@@ -1457,9 +1462,10 @@ static int mount_add_one(
                 if (u->load_state == UNIT_ERROR) {
                         u->load_state = UNIT_LOADED;
                         u->load_error = 0;
-                        r = mount_add_extras(MOUNT(u));
-                        if (r < 0)
-                                goto fail;
+
+                        /* Load in the extras later on, after we
+                         * finished initialization of the unit */
+                        load_extras = true;
                 }
         }
 
@@ -1490,6 +1496,12 @@ static int mount_add_one(
 
         p->passno = passno;
 
+        if (load_extras) {
+                r = mount_add_extras(MOUNT(u));
+                if (r < 0)
+                        goto fail;
+        }
+
         unit_add_to_dbus_queue(u);
 
         return 0;