35 lines
1.7 KiB
Diff
35 lines
1.7 KiB
Diff
diff --git a/init.initfs.d/ramfs@.service b/init.initfs.d/ramfs@.service
|
|
index bb512c60..3c3ed97d 100644
|
|
--- a/init.initfs.d/ramfs@.service
|
|
+++ b/init.initfs.d/ramfs@.service
|
|
@@ -4 +4 @@ default_dependencies = false
|
|
-requires_weak = ["00_randd.service"]
|
|
+requires = ["00_randd.service"]
|
|
diff --git a/init/src/scheduler.rs b/init/src/scheduler.rs
|
|
index 1bfc5c48..8db29281 100644
|
|
--- a/init/src/scheduler.rs
|
|
+++ b/init/src/scheduler.rs
|
|
@@ -120,2 +120,20 @@ if !hard_deps_met {
|
|
- init_warn(&format!("{}: hard dependency not met, skipping", job.unit.0));
|
|
- self.completed.insert(job.unit);
|
|
+ let unit = unit_store.unit(&job.unit);
|
|
+ let unit_id_str = job.unit.0.clone();
|
|
+ let all_deps_missing = unit.info.requires.iter().all(|dep| {
|
|
+ self.completed.contains(dep) || !unit_store.has_unit(dep)
|
|
+ });
|
|
+ if all_deps_missing {
|
|
+ init_warn(&format!("{}: hard dependency not met, skipping", unit_id_str));
|
|
+ self.completed.insert(job.unit);
|
|
+ continue 'a;
|
|
+ }
|
|
+ defer_count += 1;
|
|
+ self.pending.push_back(job);
|
|
+ if defer_count > self.pending.len() + self.completed.len() {
|
|
+ init_warn(&format!(
|
|
+ "{}: hard dependency not met after deferring, skipping",
|
|
+ unit_id_str
|
|
+ ));
|
|
+ self.completed.insert(UnitId(unit_id_str));
|
|
+ return;
|
|
+ }
|