#include "log.h"
#include "strv.h"
#include "mkdir.h"
+#include "path-util.h"
#include "mount-setup.h"
#include "unit-name.h"
#include "dbus-mount.h"
return 0;
}
+static int mount_add_requires_mounts_links(Mount *m) {
+ Unit *other;
+ int r;
+
+ assert(m);
+
+ LIST_FOREACH(has_requires_mounts_for, other, UNIT(m)->manager->has_requires_mounts_for) {
+ r = unit_add_one_mount_link(other, m);
+ if (r < 0)
+ return r;
+ }
+
+ return 0;
+}
+
static char* mount_test_option(const char *haystack, const char *needle) {
struct mntent me;
MountParameters *p;
Unit *tu;
int r;
- bool noauto, nofail, handle, automount;
+ bool noauto, nofail, automount;
assert(m);
automount =
mount_test_option(p->options, "comment=systemd.automount") ||
mount_test_option(p->options, "x-systemd-automount");
- handle =
- automount ||
- mount_test_option(p->options, "comment=systemd.mount") ||
- mount_test_option(p->options, "x-systemd-mount") ||
- UNIT(m)->manager->mount_auto;
if (mount_is_network(p)) {
target = SPECIAL_REMOTE_FS_TARGET;
else /* automount + nofail */
return unit_add_two_dependencies(tu, UNIT_AFTER, UNIT_WANTS, am, true);
- } else if (handle && !noauto) {
+ } else if (!noauto) {
/* Automatically add mount points that aren't natively
* configured to local-fs.target */
if ((r = mount_add_path_links(m)) < 0)
return r;
+ r = mount_add_requires_mounts_links(m);
+ if (r < 0)
+ return r;
+
if ((r = mount_add_automount_links(m)) < 0)
return r;
UNIT(m)->cgroup_bondings,
UNIT(m)->cgroup_attributes,
NULL,
+ NULL,
&pid)) < 0)
goto fail;
if ((r = set_put(pid_set, LONG_TO_PTR(m->control_pid))) < 0)
goto fail;
- r = cgroup_bonding_kill_list(UNIT(m)->cgroup_bondings, sig, true, pid_set, NULL);
+ r = cgroup_bonding_kill_list(UNIT(m)->cgroup_bondings, sig, true, false, pid_set, NULL);
if (r < 0) {
if (r != -EAGAIN && r != -ESRCH && r != -ENOENT)
log_warning("Failed to kill control group: %s", strerror(-r));
assert(m);
errno = 0;
- if (!(f = setmntent("/etc/fstab", "r")))
- return -errno;
+ f = setmntent("/etc/fstab", "r");
+ if (!f)
+ return errno == ENOENT ? 0 : -errno;
while ((me = getmntent(f))) {
char *where, *what;
pri,
!!mount_test_option(me->mnt_opts, "noauto"),
!!mount_test_option(me->mnt_opts, "nofail"),
- !!mount_test_option(me->mnt_opts, "comment=systemd.swapon"),
false);
} else
k = mount_add_one(m, what, where, me->mnt_opts, me->mnt_type, me->mnt_passno, false, false);
goto finish;
}
- q = cgroup_bonding_kill_list(UNIT(m)->cgroup_bondings, signo, false, pid_set, NULL);
+ q = cgroup_bonding_kill_list(UNIT(m)->cgroup_bondings, signo, false, false, pid_set, NULL);
if (q < 0)
if (q != -EAGAIN && q != -ESRCH && q != -ENOENT)
r = q;