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
 |