Fix plymouth etc. running when they shouldn't (#1803293)
This commit is contained in:
parent
3666983037
commit
3620ae5f58
144
0001-Revert-job-Don-t-mark-as-redundant-if-deps-are-relev.patch
Normal file
144
0001-Revert-job-Don-t-mark-as-redundant-if-deps-are-relev.patch
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
From 6f202edb2c2e340523c6c0f2c0a93690eaab7a68 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Adam Williamson <awilliam@redhat.com>
|
||||||
|
Date: Tue, 18 Feb 2020 08:44:34 -0800
|
||||||
|
Subject: [PATCH] Revert "job: Don't mark as redundant if deps are relevant"
|
||||||
|
|
||||||
|
This reverts commit 097537f07a2fab3cb73aef7bc59f2a66aa93f533. It
|
||||||
|
causes https://bugzilla.redhat.com/show_bug.cgi?id=1803293 .
|
||||||
|
---
|
||||||
|
src/core/job.c | 51 ++++++------------------------------------
|
||||||
|
src/core/job.h | 3 +--
|
||||||
|
src/core/transaction.c | 8 +++----
|
||||||
|
3 files changed, 12 insertions(+), 50 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/core/job.c b/src/core/job.c
|
||||||
|
index 5982404cf0..5048a5093e 100644
|
||||||
|
--- a/src/core/job.c
|
||||||
|
+++ b/src/core/job.c
|
||||||
|
@@ -383,62 +383,25 @@ JobType job_type_lookup_merge(JobType a, JobType b) {
|
||||||
|
return job_merging_table[(a - 1) * a / 2 + b];
|
||||||
|
}
|
||||||
|
|
||||||
|
-bool job_later_link_matters(Job *j, JobType type, unsigned generation) {
|
||||||
|
- JobDependency *l;
|
||||||
|
-
|
||||||
|
- assert(j);
|
||||||
|
-
|
||||||
|
- j->generation = generation;
|
||||||
|
-
|
||||||
|
- LIST_FOREACH(subject, l, j->subject_list) {
|
||||||
|
- UnitActiveState state = _UNIT_ACTIVE_STATE_INVALID;
|
||||||
|
-
|
||||||
|
- /* Have we seen this before? */
|
||||||
|
- if (l->object->generation == generation)
|
||||||
|
- continue;
|
||||||
|
-
|
||||||
|
- state = unit_active_state(l->object->unit);
|
||||||
|
- switch (type) {
|
||||||
|
-
|
||||||
|
- case JOB_START:
|
||||||
|
- return IN_SET(state, UNIT_INACTIVE, UNIT_FAILED) ||
|
||||||
|
- job_later_link_matters(l->object, type, generation);
|
||||||
|
-
|
||||||
|
- case JOB_STOP:
|
||||||
|
- return IN_SET(state, UNIT_ACTIVE, UNIT_RELOADING) ||
|
||||||
|
- job_later_link_matters(l->object, type, generation);
|
||||||
|
-
|
||||||
|
- default:
|
||||||
|
- assert_not_reached("Invalid job type");
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- return false;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-bool job_is_redundant(Job *j, unsigned generation) {
|
||||||
|
-
|
||||||
|
- assert(j);
|
||||||
|
-
|
||||||
|
- UnitActiveState state = unit_active_state(j->unit);
|
||||||
|
- switch (j->type) {
|
||||||
|
+bool job_type_is_redundant(JobType a, UnitActiveState b) {
|
||||||
|
+ switch (a) {
|
||||||
|
|
||||||
|
case JOB_START:
|
||||||
|
- return IN_SET(state, UNIT_ACTIVE, UNIT_RELOADING) && !job_later_link_matters(j, JOB_START, generation);
|
||||||
|
+ return IN_SET(b, UNIT_ACTIVE, UNIT_RELOADING);
|
||||||
|
|
||||||
|
case JOB_STOP:
|
||||||
|
- return IN_SET(state, UNIT_INACTIVE, UNIT_FAILED) && !job_later_link_matters(j, JOB_STOP, generation);
|
||||||
|
+ return IN_SET(b, UNIT_INACTIVE, UNIT_FAILED);
|
||||||
|
|
||||||
|
case JOB_VERIFY_ACTIVE:
|
||||||
|
- return IN_SET(state, UNIT_ACTIVE, UNIT_RELOADING);
|
||||||
|
+ return IN_SET(b, UNIT_ACTIVE, UNIT_RELOADING);
|
||||||
|
|
||||||
|
case JOB_RELOAD:
|
||||||
|
return
|
||||||
|
- state == UNIT_RELOADING;
|
||||||
|
+ b == UNIT_RELOADING;
|
||||||
|
|
||||||
|
case JOB_RESTART:
|
||||||
|
return
|
||||||
|
- state == UNIT_ACTIVATING;
|
||||||
|
+ b == UNIT_ACTIVATING;
|
||||||
|
|
||||||
|
case JOB_NOP:
|
||||||
|
return true;
|
||||||
|
diff --git a/src/core/job.h b/src/core/job.h
|
||||||
|
index 02b057ee06..03ad640618 100644
|
||||||
|
--- a/src/core/job.h
|
||||||
|
+++ b/src/core/job.h
|
||||||
|
@@ -196,8 +196,7 @@ _pure_ static inline bool job_type_is_superset(JobType a, JobType b) {
|
||||||
|
return a == job_type_lookup_merge(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
-bool job_later_link_matters(Job *j, JobType type, unsigned generation);
|
||||||
|
-bool job_is_redundant(Job *j, unsigned generation);
|
||||||
|
+bool job_type_is_redundant(JobType a, UnitActiveState b) _pure_;
|
||||||
|
|
||||||
|
/* Collapses a state-dependent job type into a simpler type by observing
|
||||||
|
* the state of the unit which it is going to be applied to. */
|
||||||
|
diff --git a/src/core/transaction.c b/src/core/transaction.c
|
||||||
|
index 8d67f9ce1a..a0ea0f0489 100644
|
||||||
|
--- a/src/core/transaction.c
|
||||||
|
+++ b/src/core/transaction.c
|
||||||
|
@@ -279,7 +279,7 @@ static int transaction_merge_jobs(Transaction *tr, sd_bus_error *e) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void transaction_drop_redundant(Transaction *tr, unsigned generation) {
|
||||||
|
+static void transaction_drop_redundant(Transaction *tr) {
|
||||||
|
bool again;
|
||||||
|
|
||||||
|
/* Goes through the transaction and removes all jobs of the units whose jobs are all noops. If not
|
||||||
|
@@ -299,7 +299,7 @@ static void transaction_drop_redundant(Transaction *tr, unsigned generation) {
|
||||||
|
|
||||||
|
LIST_FOREACH(transaction, k, j)
|
||||||
|
if (tr->anchor_job == k ||
|
||||||
|
- !job_is_redundant(k, generation) ||
|
||||||
|
+ !job_type_is_redundant(k->type, unit_active_state(k->unit)) ||
|
||||||
|
(k->unit->job && job_type_is_conflicting(k->type, k->unit->job->type))) {
|
||||||
|
keep = true;
|
||||||
|
break;
|
||||||
|
@@ -730,7 +730,7 @@ int transaction_activate(
|
||||||
|
transaction_minimize_impact(tr);
|
||||||
|
|
||||||
|
/* Third step: Drop redundant jobs */
|
||||||
|
- transaction_drop_redundant(tr, generation++);
|
||||||
|
+ transaction_drop_redundant(tr);
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
/* Fourth step: Let's remove unneeded jobs that might
|
||||||
|
@@ -772,7 +772,7 @@ int transaction_activate(
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Eights step: Drop redundant jobs again, if the merging now allows us to drop more. */
|
||||||
|
- transaction_drop_redundant(tr, generation++);
|
||||||
|
+ transaction_drop_redundant(tr);
|
||||||
|
|
||||||
|
/* Ninth step: check whether we can actually apply this */
|
||||||
|
r = transaction_is_destructive(tr, mode, e);
|
||||||
|
--
|
||||||
|
2.25.0
|
||||||
|
|
@ -15,7 +15,7 @@
|
|||||||
Name: systemd
|
Name: systemd
|
||||||
Url: https://www.freedesktop.org/wiki/Software/systemd
|
Url: https://www.freedesktop.org/wiki/Software/systemd
|
||||||
Version: 245~rc1
|
Version: 245~rc1
|
||||||
Release: 2%{?commit:.git%{shortcommit}}%{?dist}
|
Release: 3%{?commit:.git%{shortcommit}}%{?dist}
|
||||||
# For a breakdown of the licensing, see README
|
# For a breakdown of the licensing, see README
|
||||||
License: LGPLv2+ and MIT and GPLv2+
|
License: LGPLv2+ and MIT and GPLv2+
|
||||||
Summary: System and Service Manager
|
Summary: System and Service Manager
|
||||||
@ -72,6 +72,9 @@ Patch0010: https://github.com/systemd/systemd/commit/99fdffaa194cbfed659b0c
|
|||||||
|
|
||||||
Patch0998: 0998-resolved-create-etc-resolv.conf-symlink-at-runtime.patch
|
Patch0998: 0998-resolved-create-etc-resolv.conf-symlink-at-runtime.patch
|
||||||
|
|
||||||
|
# https://bugzilla.redhat.com/show_bug.cgi?id=1803293
|
||||||
|
Patch1000: 0001-Revert-job-Don-t-mark-as-redundant-if-deps-are-relev.patch
|
||||||
|
|
||||||
%ifarch %{ix86} x86_64 aarch64
|
%ifarch %{ix86} x86_64 aarch64
|
||||||
%global have_gnu_efi 1
|
%global have_gnu_efi 1
|
||||||
%endif
|
%endif
|
||||||
@ -739,6 +742,9 @@ fi
|
|||||||
%files tests -f .file-list-tests
|
%files tests -f .file-list-tests
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Feb 18 2020 Adam Williamson <awilliam@redhat.com> - 245~rc1-3
|
||||||
|
- Revert 097537f0 to fix plymouth etc. running when they shouldn't (#1803293)
|
||||||
|
|
||||||
* Fri Feb 7 2020 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 245~rc1-2
|
* Fri Feb 7 2020 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 245~rc1-2
|
||||||
- Add default 'disable *' preset for user units (#1792474),
|
- Add default 'disable *' preset for user units (#1792474),
|
||||||
see https://fedoraproject.org/wiki/Changes/Systemd_presets_for_user_units.
|
see https://fedoraproject.org/wiki/Changes/Systemd_presets_for_user_units.
|
||||||
|
Loading…
Reference in New Issue
Block a user