}
static int mount_add_device_dependencies(Mount *m) {
- UnitDependencyMask mask;
MountParameters *p;
UnitDependency dep;
int r;
* suddenly. */
dep = mount_is_bound_to_device(m) ? UNIT_BINDS_TO : UNIT_REQUIRES;
- /* We always use 'what' from /proc/self/mountinfo if mounted */
- mask = m->from_proc_self_mountinfo ? UNIT_DEPENDENCY_MOUNTINFO_IMPLICIT : UNIT_DEPENDENCY_FILE;
-
- r = unit_add_node_dependency(UNIT(m), p->what, dep, mask);
+ r = unit_add_node_dependency(UNIT(m), p->what, dep, UNIT_DEPENDENCY_MOUNTINFO_OR_FILE);
if (r < 0)
return r;
if (r > 0)
log_unit_trace(UNIT(m), "Added %s dependency on %s", unit_dependency_to_string(dep), p->what);
if (mount_propagate_stop(m)) {
- r = unit_add_node_dependency(UNIT(m), p->what, UNIT_STOP_PROPAGATED_FROM, mask);
+ r = unit_add_node_dependency(UNIT(m), p->what, UNIT_STOP_PROPAGATED_FROM, UNIT_DEPENDENCY_MOUNTINFO_OR_FILE);
if (r < 0)
return r;
if (r > 0)
unit_dependency_to_string(UNIT_STOP_PROPAGATED_FROM), p->what);
}
- r = unit_add_blockdev_dependency(UNIT(m), p->what, mask);
+ r = unit_add_blockdev_dependency(UNIT(m), p->what, UNIT_DEPENDENCY_MOUNTINFO_OR_FILE);
if (r > 0)
log_unit_trace(UNIT(m), "Added %s dependency on %s", unit_dependency_to_string(UNIT_AFTER), p->what);
- return r;
+ return 0;
}
static int mount_add_quota_dependencies(Mount *m) {
static int mount_add_default_ordering_dependencies(
Mount *m,
- MountParameters *p,
- UnitDependencyMask mask) {
+ MountParameters *p) {
const char *after, *before, *e;
int r;
}
if (!mount_is_nofail(m)) {
- r = unit_add_dependency_by_name(UNIT(m), UNIT_BEFORE, before, true, mask);
+ r = unit_add_dependency_by_name(UNIT(m), UNIT_BEFORE, before, true,
+ UNIT_DEPENDENCY_MOUNTINFO_OR_FILE);
if (r < 0)
return r;
}
if (after) {
- r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, after, true, mask);
+ r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, after, true,
+ UNIT_DEPENDENCY_MOUNTINFO_OR_FILE);
if (r < 0)
return r;
}
return unit_add_two_dependencies_by_name(UNIT(m), UNIT_BEFORE, UNIT_CONFLICTS,
- SPECIAL_UMOUNT_TARGET, true, mask);
+ SPECIAL_UMOUNT_TARGET, true,
+ UNIT_DEPENDENCY_MOUNTINFO_OR_FILE);
}
static int mount_add_default_dependencies(Mount *m) {
- UnitDependencyMask mask;
MountParameters *p;
int r;
if (!p)
return 0;
- mask = m->from_fragment ? UNIT_DEPENDENCY_FILE : UNIT_DEPENDENCY_MOUNTINFO_DEFAULT;
-
- r = mount_add_default_ordering_dependencies(m, p, mask);
+ r = mount_add_default_ordering_dependencies(m, p);
if (r < 0)
return r;
* network.target, so that they are shut down only after this mount unit is
* stopped. */
- r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, SPECIAL_NETWORK_TARGET, true, mask);
+ r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, SPECIAL_NETWORK_TARGET, true,
+ UNIT_DEPENDENCY_MOUNTINFO_OR_FILE);
if (r < 0)
return r;
* mounting network file systems, and whose purpose it is to delay this until the
* network is "up". */
- r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_WANTS, UNIT_AFTER, SPECIAL_NETWORK_ONLINE_TARGET, true, mask);
+ r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_WANTS, UNIT_AFTER,
+ SPECIAL_NETWORK_ONLINE_TARGET, true,
+ UNIT_DEPENDENCY_MOUNTINFO_OR_FILE);
if (r < 0)
return r;
}
/* If this is a tmpfs mount then we have to unmount it before we try to deactivate swaps */
if (streq_ptr(p->fstype, "tmpfs")) {
- r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, SPECIAL_SWAP_TARGET, true, mask);
+ r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, SPECIAL_SWAP_TARGET, true,
+ UNIT_DEPENDENCY_MOUNTINFO_OR_FILE);
if (r < 0)
return r;
}
static int mount_add_non_exec_dependencies(Mount *m) {
int r;
+
assert(m);
+ /* Any dependencies based on /proc/self/mountinfo may be now stale. */
+ unit_remove_dependencies(UNIT(m),
+ UNIT_DEPENDENCY_MOUNTINFO_IMPLICIT |
+ UNIT_DEPENDENCY_MOUNTINFO_DEFAULT |
+ UNIT_DEPENDENCY_MOUNTINFO_OR_FILE);
+
+ if (!m->where)
+ return 0;
+
/* Adds in all dependencies directly responsible for ordering the mount, as opposed to dependencies
* resulting from the ExecContext and such. */
dynamic_creds_destroy(&m->dynamic_creds);
- /* Any dependencies based on /proc/self/mountinfo are now stale */
- unit_remove_dependencies(UNIT(m), UNIT_DEPENDENCY_MOUNTINFO_IMPLICIT | UNIT_DEPENDENCY_MOUNTINFO_DEFAULT);
+ /* Any dependencies based on /proc/self/mountinfo are now stale. Let's re-generate dependencies from
+ * .mount unit. */
+ (void) mount_add_non_exec_dependencies(m);
}
static void mount_enter_mounted(Mount *m, MountResult f) {
if (FLAGS_SET(flags, MOUNT_PROC_JUST_CHANGED)) {
/* If things changed, then make sure that all deps are regenerated. Let's
* first remove all automatic deps, and then add in the new ones. */
-
- unit_remove_dependencies(u, UNIT_DEPENDENCY_MOUNTINFO_IMPLICIT | UNIT_DEPENDENCY_MOUNTINFO_DEFAULT);
-
r = mount_add_non_exec_dependencies(MOUNT(u));
if (r < 0)
return r;