From 3620ae5f588c92458a5c6a24484a156dccaa4ba1 Mon Sep 17 00:00:00 2001 From: Adam Williamson Date: Feb 18 2020 17:02:08 +0000 Subject: Fix plymouth etc. running when they shouldn't (#1803293) --- diff --git a/0001-Revert-job-Don-t-mark-as-redundant-if-deps-are-relev.patch b/0001-Revert-job-Don-t-mark-as-redundant-if-deps-are-relev.patch new file mode 100644 index 0000000..916474d --- /dev/null +++ b/0001-Revert-job-Don-t-mark-as-redundant-if-deps-are-relev.patch @@ -0,0 +1,144 @@ +From 6f202edb2c2e340523c6c0f2c0a93690eaab7a68 Mon Sep 17 00:00:00 2001 +From: Adam Williamson +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 + diff --git a/systemd.spec b/systemd.spec index 43fdf16..a6e5188 100644 --- a/systemd.spec +++ b/systemd.spec @@ -15,7 +15,7 @@ Name: systemd Url: https://www.freedesktop.org/wiki/Software/systemd Version: 245~rc1 -Release: 2%{?commit:.git%{shortcommit}}%{?dist} +Release: 3%{?commit:.git%{shortcommit}}%{?dist} # For a breakdown of the licensing, see README License: LGPLv2+ and MIT and GPLv2+ 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 +# 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 %global have_gnu_efi 1 %endif @@ -739,6 +742,9 @@ fi %files tests -f .file-list-tests %changelog +* Tue Feb 18 2020 Adam Williamson - 245~rc1-3 +- Revert 097537f0 to fix plymouth etc. running when they shouldn't (#1803293) + * Fri Feb 7 2020 Zbigniew Jędrzejewski-Szmek - 245~rc1-2 - Add default 'disable *' preset for user units (#1792474), see https://fedoraproject.org/wiki/Changes/Systemd_presets_for_user_units.