114 lines
5.4 KiB
Diff
114 lines
5.4 KiB
Diff
From 7870de03c52982290f9b8ae11eb4d89db66f4be3 Mon Sep 17 00:00:00 2001
|
|
From: Franck Bui <fbui@suse.com>
|
|
Date: Thu, 5 May 2022 11:11:57 +0200
|
|
Subject: [PATCH] core: replace m->honor_device_enumeration with
|
|
MANAGER_IS_SWITCHING_ROOT()
|
|
|
|
---
|
|
src/core/device.c | 7 +++----
|
|
src/core/manager.c | 21 +--------------------
|
|
src/core/manager.h | 2 --
|
|
3 files changed, 4 insertions(+), 26 deletions(-)
|
|
|
|
diff --git a/src/core/device.c b/src/core/device.c
|
|
index d9669e3..0bca0ff 100644
|
|
--- a/src/core/device.c
|
|
+++ b/src/core/device.c
|
|
@@ -189,9 +189,8 @@ static int device_coldplug(Unit *u) {
|
|
* OPTIONS="db_persist". Hence, almost no devices are enumerated in the step 2. However, in general,
|
|
* we have several serialized devices. So, DEVICE_FOUND_UDEV bit in the deserialized_found must be
|
|
* ignored, as udev rules in initramfs and the main system are often different. If the deserialized
|
|
- * state is DEVICE_PLUGGED, we need to downgrade it to DEVICE_TENTATIVE (or DEVICE_DEAD if nobody
|
|
- * sees the device). Unlike the other starting mode, Manager.honor_device_enumeration == false
|
|
- * (maybe, it is better to rename the flag) when device_coldplug() and device_catchup() are called.
|
|
+ * state is DEVICE_PLUGGED, we need to downgrade it to DEVICE_TENTATIVE. Unlike the other starting
|
|
+ * mode, MANAGER_IS_SWITCHING_ROOT() is true when device_coldplug() and device_catchup() are called.
|
|
* Hence, let's conditionalize the operations by using the flag. After switch-root, systemd-udevd
|
|
* will (re-)process all devices, and the Device.found and Device.state will be adjusted.
|
|
*
|
|
@@ -199,7 +198,7 @@ static int device_coldplug(Unit *u) {
|
|
* Of course, deserialized parameters may be outdated, but the unit state can be adjusted later by
|
|
* device_catchup() or uevents. */
|
|
|
|
- if (!m->honor_device_enumeration && !MANAGER_IS_USER(m) &&
|
|
+ if (MANAGER_IS_SWITCHING_ROOT(m) &&
|
|
!FLAGS_SET(d->enumerated_found, DEVICE_FOUND_UDEV)) {
|
|
found &= ~DEVICE_FOUND_UDEV; /* ignore DEVICE_FOUND_UDEV bit */
|
|
if (state == DEVICE_PLUGGED)
|
|
diff --git a/src/core/manager.c b/src/core/manager.c
|
|
index 5ed7191..91e9b2a 100644
|
|
--- a/src/core/manager.c
|
|
+++ b/src/core/manager.c
|
|
@@ -1689,8 +1689,6 @@ static void manager_ready(Manager *m) {
|
|
|
|
/* Let's finally catch up with any changes that took place while we were reloading/reexecing */
|
|
manager_catchup(m);
|
|
-
|
|
- m->honor_device_enumeration = true;
|
|
}
|
|
|
|
static Manager* manager_reloading_start(Manager *m) {
|
|
@@ -3259,9 +3257,6 @@ int manager_serialize(
|
|
(void) serialize_bool(f, "taint-logged", m->taint_logged);
|
|
(void) serialize_bool(f, "service-watchdogs", m->service_watchdogs);
|
|
|
|
- /* After switching root, udevd has not been started yet. So, enumeration results should not be emitted. */
|
|
- (void) serialize_bool(f, "honor-device-enumeration", !switching_root);
|
|
-
|
|
if (m->show_status_overridden != _SHOW_STATUS_INVALID)
|
|
(void) serialize_item(f, "show-status-overridden",
|
|
show_status_to_string(m->show_status_overridden));
|
|
@@ -3635,15 +3630,6 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
|
|
else
|
|
m->service_watchdogs = b;
|
|
|
|
- } else if ((val = startswith(l, "honor-device-enumeration="))) {
|
|
- int b;
|
|
-
|
|
- b = parse_boolean(val);
|
|
- if (b < 0)
|
|
- log_notice("Failed to parse honor-device-enumeration flag '%s', ignoring.", val);
|
|
- else
|
|
- m->honor_device_enumeration = b;
|
|
-
|
|
} else if ((val = startswith(l, "show-status-overridden="))) {
|
|
ShowStatus s;
|
|
|
|
@@ -3767,7 +3753,7 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
|
|
|
|
if (q < _MANAGER_TIMESTAMP_MAX) /* found it */
|
|
(void) deserialize_dual_timestamp(val, m->timestamps + q);
|
|
- else if (!startswith(l, "kdbus-fd=")) /* ignore kdbus */
|
|
+ else if (!STARTSWITH_SET(l, "kdbus-fd=", "honor-device-enumeration=")) /* ignore deprecated values */
|
|
log_notice("Unknown serialization item '%s', ignoring.", l);
|
|
}
|
|
}
|
|
@@ -3860,11 +3846,6 @@ int manager_reload(Manager *m) {
|
|
assert(m->n_reloading > 0);
|
|
m->n_reloading--;
|
|
|
|
- /* On manager reloading, device tag data should exists, thus, we should honor the results of device
|
|
- * enumeration. The flag should be always set correctly by the serialized data, but it may fail. So,
|
|
- * let's always set the flag here for safety. */
|
|
- m->honor_device_enumeration = true;
|
|
-
|
|
manager_ready(m);
|
|
|
|
m->send_reloading_done = true;
|
|
diff --git a/src/core/manager.h b/src/core/manager.h
|
|
index 453706c..67c204f 100644
|
|
--- a/src/core/manager.h
|
|
+++ b/src/core/manager.h
|
|
@@ -442,8 +442,6 @@ struct Manager {
|
|
unsigned sigchldgen;
|
|
unsigned notifygen;
|
|
|
|
- bool honor_device_enumeration;
|
|
-
|
|
VarlinkServer *varlink_server;
|
|
/* Only systemd-oomd should be using this to subscribe to changes in ManagedOOM settings */
|
|
Varlink *managed_oom_varlink_request;
|
|
--
|
|
2.33.0
|
|
|