MountParameters *p;
Unit *tu;
int r;
- bool noauto, handle, automount;
+ bool noauto, nofail, handle, automount;
assert(m);
return 0;
noauto = !!mount_test_option(p->options, MNTOPT_NOAUTO);
+ nofail = !!mount_test_option(p->options, "nofail");
handle = !!mount_test_option(p->options, "comment=systemd.mount") ||
m->meta.manager->mount_auto;
automount = !!mount_test_option(p->options, "comment=systemd.automount");
/* Automatically add mount points that aren't natively
* configured to local-fs.target */
if (!noauto &&
+ !nofail &&
handle &&
m->from_etc_fstab &&
m->meta.manager->running_as == MANAGER_SYSTEM)
if ((r = mount_add_target_links(m)) < 0)
return r;
- if ((r = unit_add_default_cgroup(u)) < 0)
+ if ((r = unit_add_default_cgroups(u)) < 0)
return r;
if (m->meta.default_dependencies)
break;
case MOUNT_MOUNTING_SIGTERM:
- log_warning("%s mounting timed out. Killing.", u->meta.id);
- mount_enter_signal(m, MOUNT_MOUNTING_SIGKILL, false);
+ if (m->exec_context.send_sigkill) {
+ log_warning("%s mounting timed out. Killing.", u->meta.id);
+ mount_enter_signal(m, MOUNT_MOUNTING_SIGKILL, false);
+ } else {
+ log_warning("%s mounting timed out. Skipping SIGKILL. Ignoring.", u->meta.id);
+
+ if (m->from_proc_self_mountinfo)
+ mount_enter_mounted(m, false);
+ else
+ mount_enter_dead(m, false);
+ }
break;
case MOUNT_REMOUNTING_SIGTERM:
- log_warning("%s remounting timed out. Killing.", u->meta.id);
- mount_enter_signal(m, MOUNT_REMOUNTING_SIGKILL, false);
+ if (m->exec_context.send_sigkill) {
+ log_warning("%s remounting timed out. Killing.", u->meta.id);
+ mount_enter_signal(m, MOUNT_REMOUNTING_SIGKILL, false);
+ } else {
+ log_warning("%s remounting timed out. Skipping SIGKILL. Ignoring.", u->meta.id);
+
+ if (m->from_proc_self_mountinfo)
+ mount_enter_mounted(m, false);
+ else
+ mount_enter_dead(m, false);
+ }
break;
case MOUNT_UNMOUNTING_SIGTERM:
- log_warning("%s unmounting timed out. Killing.", u->meta.id);
- mount_enter_signal(m, MOUNT_UNMOUNTING_SIGKILL, false);
+ if (m->exec_context.send_sigkill) {
+ log_warning("%s unmounting timed out. Killing.", u->meta.id);
+ mount_enter_signal(m, MOUNT_UNMOUNTING_SIGKILL, false);
+ } else {
+ log_warning("%s unmounting timed out. Skipping SIGKILL. Ignoring.", u->meta.id);
+
+ if (m->from_proc_self_mountinfo)
+ mount_enter_mounted(m, false);
+ else
+ mount_enter_dead(m, false);
+ }
break;
case MOUNT_MOUNTING_SIGKILL:
* dependencies ever. */
if (mount_point_is_api(where))
return 0;
+ if (mount_point_ignore(where))
+ return 0;
if (streq(fstype, "autofs"))
return 0;
return r;
}
-static char *fstab_node_to_udev_node(char *p) {
- char *dn, *t, *u;
- int r;
-
- /* FIXME: to follow udev's logic 100% we need to leave valid
- * UTF8 chars unescaped */
-
- if (startswith(p, "LABEL=")) {
-
- if (!(u = unquote(p+6, "\"\'")))
- return NULL;
-
- t = xescape(u, "/ ");
- free(u);
-
- if (!t)
- return NULL;
-
- r = asprintf(&dn, "/dev/disk/by-label/%s", t);
- free(t);
-
- if (r < 0)
- return NULL;
-
- return dn;
- }
-
- if (startswith(p, "UUID=")) {
-
- if (!(u = unquote(p+5, "\"\'")))
- return NULL;
-
- t = xescape(u, "/ ");
- free(u);
-
- if (!t)
- return NULL;
-
- r = asprintf(&dn, "/dev/disk/by-uuid/%s", ascii_strlower(t));
- free(t);
-
- if (r < 0)
- return NULL;
-
- return dn;
- }
-
- return strdup(p);
-}
-
static int mount_find_pri(char *options) {
char *end, *pri;
unsigned long r;