In commit 1c97aee and commit 227c185 udev rules was rewritten to use
systemd-run to run in a non-blocking mode. The problem is that it's a
bit noise, especially on machine bootup, systemd will always generate
extra logs for service start, you might see your journal full of lines
like these if you have many CPUs (each CPU generates a udev event on
boot):
...
Nov 22 22:23:05 localhost systemd[1]: Started /usr/lib/udev/kdump-udev-throttler.
Nov 22 22:23:05 localhost systemd[1]: Started /usr/lib/udev/kdump-udev-throttler.
Nov 22 22:23:05 localhost systemd[1]: Started /usr/lib/udev/kdump-udev-throttler.
Nov 22 22:23:05 localhost systemd[1]: Started /usr/lib/udev/kdump-udev-throttler.
...
While system is still booting up, kdump service is not started yet, so
systemd-run calls will end up doing nothing, the throttler being called
by systemd-run will just exit if kdump is not loaded.
This patch avoid systemd-run from being called at first place if kdump
service is not running, so there won't be unnecessary logs.
As udev rules don't support shell expressions, this patch reuse
the kdump-udev-throttler script, adding a --no-block option.
kdump-udev-throttler will call it self with systemd-run to run in non
blocking mode if --no-block is given, and exit before doing anything if
kdump is not started. Udev just call "kdump-udev-throttler --no-block"
directly.
Signed-off-by: Kairui Song <kasong(a)redhat.com>
---
98-kexec.rules | 2 +-
kdump-udev-throttler | 13 ++++++++++---
2 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/98-kexec.rules b/98-kexec.rules
index 2f88c77..eca909e 100644
--- a/98-kexec.rules
+++ b/98-kexec.rules
@@ -7,6 +7,6 @@ GOTO="kdump_reload_end"
LABEL="kdump_reload"
-RUN+="/usr/bin/systemd-run --no-block /usr/lib/udev/kdump-udev-throttler"
+RUN+="/usr/lib/udev/kdump-udev-throttler --no-block"
LABEL="kdump_reload_end"
diff --git a/kdump-udev-throttler b/kdump-udev-throttler
index 6cbb99a..6899379 100755
--- a/kdump-udev-throttler
+++ b/kdump-udev-throttler
@@ -13,13 +13,20 @@
# In this way, we can make sure kdump service is restarted immediately
# and for exactly once after udev events are settled.
-
throttle_lock="/var/lock/kdump-udev-throttle"
-interval=2
-# Don't reload kdump service if kdump service is not started by systemd
+# Don't do anything if kdump service is not started by systemd
systemctl is-active kdump.service &>/dev/null || exit 0
+if [[ $1 == '--no-block' ]]; then
+ systemd-run --no-block --quiet $0
+ if [[ $? -ne 0 ]]; then
+ echo "kdump-udev-throttler: Failed to call systemd-run"
+ exit 1
+ fi
+ exit 0
+fi
+
exec 9>$throttle_lock
if [ $? -ne 0 ]; then
echo "Failed to create the lock file! Fallback to non-throttled kdump service restart"
--
2.19.1