You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.4 KiB
42 lines
1.4 KiB
#!/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
|
|
|