bed1e46362
Backport the patches for this issue: https://bugzilla.redhat.com/show_bug.cgi?id=1968528 It reports: The fix for Bug 1819868 has introduced a new issue related to its implementation of rate limiting. Rate limiting the mount_event_source can cause unmount events to be missed, which leads to mount unit cgroups being leaked (not cleaned up when the mount is gone). The fix for 1968528 can fix the issue we met: During the reboot process of subclouds (either lock-unlock or sudo reboot), unmounting failure messages repeat for a few hundred of times. The patches are listed at: https://github.com/redhat-plumbers/systemd-rhel8/pull/198/commits And they are picked from https://github.com/systemd-rhel/rhel-8/ (branch rhel-8.4.0). Verification: In my test on an AIO-SX lab, the bug appears as: run "sudo reboot" on controller, endless unmounting failure logs printed. Verified that the problem was there during the shutdown phase of a reboot. Reinstalled with a fixed image, and verified that the issue was now gone by doing 5 reboots. Ran sanity on the lab, and verified no new issues seen. Closes-Bug: #1948899 Signed-off-by: Li Zhou <li.zhou@windriver.com> Change-Id: If95932ceead1bea973f2219d3a8d6b04cf0fd5f8
102 lines
3.3 KiB
Diff
102 lines
3.3 KiB
Diff
From 71552a073ed08beb227b9b007fb9818f08923baa Mon Sep 17 00:00:00 2001
|
|
From: Li Zhou <li.zhou@windriver.com>
|
|
Date: Tue, 26 Oct 2021 11:46:48 +0800
|
|
Subject: [PATCH 6/6] sd-event: always reshuffle time prioq on changing
|
|
online/offline state
|
|
|
|
Before 81107b8419c39f726fd2805517a5b9faab204e59, the compare functions
|
|
for the latest or earliest prioq did not handle ratelimited flag.
|
|
So, it was ok to not reshuffle the time prioq when changing the flag.
|
|
|
|
But now, those two compare functions also compare the source is
|
|
ratelimited or not. So, it is necessary to reshuffle the time prioq
|
|
after changing the ratelimited flag.
|
|
|
|
Hopefully fixes #19903.
|
|
|
|
(cherry picked from commit 2115b9b6629eeba7bc9f42f757f38205febb1cb7)
|
|
|
|
Related: #1984406
|
|
|
|
[commit f5611a22d4a65ef440352792085774ce898adb0f from
|
|
https://github.com/systemd-rhel/rhel-8/ (branch rhel-8.4.0)
|
|
|
|
LZ: Adapt the patch for context changes and no real change on the
|
|
patch.]
|
|
|
|
Signed-off-by: Li Zhou <li.zhou@windriver.com>
|
|
---
|
|
src/libsystemd/sd-event/sd-event.c | 33 ++++++++++--------------------
|
|
1 file changed, 11 insertions(+), 22 deletions(-)
|
|
|
|
diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c
|
|
index 6215bac..c17b368 100644
|
|
--- a/src/libsystemd/sd-event/sd-event.c
|
|
+++ b/src/libsystemd/sd-event/sd-event.c
|
|
@@ -1724,14 +1724,6 @@ static int event_source_offline(
|
|
source_io_unregister(s);
|
|
break;
|
|
|
|
- case SOURCE_TIME_REALTIME:
|
|
- case SOURCE_TIME_BOOTTIME:
|
|
- case SOURCE_TIME_MONOTONIC:
|
|
- case SOURCE_TIME_REALTIME_ALARM:
|
|
- case SOURCE_TIME_BOOTTIME_ALARM:
|
|
- event_source_time_prioq_reshuffle(s);
|
|
- break;
|
|
-
|
|
case SOURCE_SIGNAL:
|
|
event_gc_signal_data(s->event, &s->priority, s->signal.sig);
|
|
break;
|
|
@@ -1749,6 +1741,11 @@ static int event_source_offline(
|
|
prioq_reshuffle(s->event->exit, s, &s->exit.prioq_index);
|
|
break;
|
|
|
|
+ case SOURCE_TIME_REALTIME:
|
|
+ case SOURCE_TIME_BOOTTIME:
|
|
+ case SOURCE_TIME_MONOTONIC:
|
|
+ case SOURCE_TIME_REALTIME_ALARM:
|
|
+ case SOURCE_TIME_BOOTTIME_ALARM:
|
|
case SOURCE_DEFER:
|
|
case SOURCE_POST:
|
|
break;
|
|
@@ -1757,6 +1754,9 @@ static int event_source_offline(
|
|
assert_not_reached("Wut? I shouldn't exist.");
|
|
}
|
|
|
|
+ /* Always reshuffle time prioq, as the ratelimited flag may be changed. */
|
|
+ event_source_time_prioq_reshuffle(s);
|
|
+
|
|
return 1;
|
|
}
|
|
|
|
@@ -1837,22 +1837,11 @@ static int event_source_online(
|
|
s->ratelimited = ratelimited;
|
|
|
|
/* Non-failing operations below */
|
|
- switch (s->type) {
|
|
- case SOURCE_TIME_REALTIME:
|
|
- case SOURCE_TIME_BOOTTIME:
|
|
- case SOURCE_TIME_MONOTONIC:
|
|
- case SOURCE_TIME_REALTIME_ALARM:
|
|
- case SOURCE_TIME_BOOTTIME_ALARM:
|
|
- event_source_time_prioq_reshuffle(s);
|
|
- break;
|
|
-
|
|
- case SOURCE_EXIT:
|
|
+ if (s->type == SOURCE_EXIT)
|
|
prioq_reshuffle(s->event->exit, s, &s->exit.prioq_index);
|
|
- break;
|
|
|
|
- default:
|
|
- break;
|
|
- }
|
|
+ /* Always reshuffle time prioq, as the ratelimited flag may be changed. */
|
|
+ event_source_time_prioq_reshuffle(s);
|
|
|
|
return 1;
|
|
}
|
|
--
|
|
2.17.1
|
|
|