Hi Kairui, On 11/22/18 at 11:05pm, Kairui Song wrote:
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@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"
This fix looks a hack, if it doable to conditionally run "/usr/lib/udev/kdump-udev-throttler --no-block" in udev rule?
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 $0if [[ $? -ne 0 ]]; thenecho "kdump-udev-throttler: Failed to call systemd-run"exit 1fiexit 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
Thanks Dave