3a36568581
In commit1c97aee
and commit227c185
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 by checking kdump.service status in udev rule, so there won't be unnecessary logs. Also remove the kdump service checking logic in kdump-udev-throttler as udev is the only expected callee of this script, if it's not being called at first place when kdump service is running, this checking will be redundant. And even if any user called this script manually, it will still work well as this script will call 'kdumpctl reload', it reload the kdump resource only if kdump is loaded already. Signed-off-by: Kairui Song <kasong@redhat.com> Acked-by: Dave Young <dyoung@redhat.com>
43 lines
1.4 KiB
Bash
Executable File
43 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# This util helps to reduce the workload of kdump service restarting
|
|
# on udev event. When hotplugging memory / CPU, multiple udev
|
|
# events may be triggered concurrently, and obviously, we don't want
|
|
# to restart kdump service for each event.
|
|
|
|
# This script will be called by udev, and make sure kdump service is
|
|
# restart after all events we are watching are settled.
|
|
|
|
# On each call, this script will update try to aquire the $throttle_lock
|
|
# The first instance acquired the file lock will keep waiting for events
|
|
# to settle and then reload kdump. Other instances will just exit
|
|
# 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"
|
|
|
|
exec 9>$throttle_lock
|
|
if [ $? -ne 0 ]; then
|
|
echo "Failed to create the lock file! Fallback to non-throttled kdump service restart"
|
|
/bin/kdumpctl reload
|
|
exit 1
|
|
fi
|
|
|
|
flock -n 9
|
|
if [ $? -ne 0 ]; then
|
|
echo "Throttling kdump restart for concurrent udev event"
|
|
exit 0
|
|
fi
|
|
|
|
# Wait for at least 1 second, at most 4 seconds for udev to settle
|
|
# Idealy we will have a less than 1 second lag between udev events settle
|
|
# and kdump reload
|
|
sleep 1 && udevadm settle --timeout 3
|
|
|
|
# Release the lock, /bin/kdumpctl will block and make the process
|
|
# holding two locks at the same time and we might miss some events
|
|
exec 9>&-
|
|
|
|
/bin/kdumpctl reload
|
|
|
|
exit 0
|