Add final_action option to kdump.conf

If a crash occurs repeatedly after enabling kdump, the system goes
into a crash loop and the dump target may get filled up by vmcores.
This is likely especially with early kdump.

This patch introduces 'final_action' option to kdump.conf, in order
for users to be able to power off the system even after capturing
a vmcore successfully.

Signed-off-by: Kazuhito Hagio <k-hagio@ab.jp.nec.com>
Cc: Dave Young <dyoung@redhat.com>
Cc: Lianbo Jiang <lijiang@redhat.com>
Cc: Bhupesh Sharma <bhsharma@redhat.com>
Acked-by: Bhupesh Sharma <bhsharma@redhat.com>
Acked-by: Dave Young <dyoung@redhat.com>
Signed-off-by: Kairui Song <kasong@redhat.com>
This commit is contained in:
Kazuhito Hagio 2019-01-17 15:31:24 -05:00 committed by Kairui Song
parent cc95f0a744
commit 242da37c58
5 changed files with 58 additions and 6 deletions

View File

@ -73,7 +73,8 @@ The control flow of fadump works as follows:
10. Is dump capture successful (yes goto 12, no goto 11) 10. Is dump capture successful (yes goto 12, no goto 11)
11. Perform the failure action specified in /etc/kdump.conf 11. Perform the failure action specified in /etc/kdump.conf
(The default failure action is reboot, if unspecified) (The default failure action is reboot, if unspecified)
12. Reboot 12. Perform the final action specified in /etc/kdump.conf
(The default final action is reboot, if unspecified)
How to configure fadump: How to configure fadump:

View File

@ -70,6 +70,19 @@ get_kdump_confs()
;; ;;
esac esac
;; ;;
final_action)
case $config_val in
reboot)
FINAL_ACTION="systemctl reboot -f"
;;
halt)
FINAL_ACTION="halt"
;;
poweroff)
FINAL_ACTION="systemctl poweroff -f"
;;
esac
;;
esac esac
done < $KDUMP_CONF done < $KDUMP_CONF

View File

@ -105,15 +105,23 @@
# halt: Halt the system. # halt: Halt the system.
# poweroff: Power down the system. # poweroff: Power down the system.
# shell: Drop to a bash shell. # shell: Drop to a bash shell.
# Exiting the shell reboots the system. # Exiting the shell reboots the system by default,
# or perform "final_action".
# dump_to_rootfs: Dump vmcore to rootfs from initramfs context and # dump_to_rootfs: Dump vmcore to rootfs from initramfs context and
# reboot. Useful when non-root dump target is specified. # reboot by default or perform "final_action".
# Useful when non-root dump target is specified.
# The default option is "reboot". # The default option is "reboot".
# #
# default <reboot | halt | poweroff | shell | dump_to_rootfs> # default <reboot | halt | poweroff | shell | dump_to_rootfs>
# - Same as the "failure_action" directive above, but this directive # - Same as the "failure_action" directive above, but this directive
# is obsolete and will be removed in the future. # is obsolete and will be removed in the future.
# #
# final_action <reboot | halt | poweroff>
# - Action to perform in case dumping succeeds. Also performed
# when "shell" or "dump_to_rootfs" failure action finishes.
# Each action is same as the "failure_action" directive above.
# The default is "reboot".
#
# force_rebuild <0 | 1> # force_rebuild <0 | 1>
# - By default, kdump initrd will only be rebuilt when necessary. # - By default, kdump initrd will only be rebuilt when necessary.
# Specify 1 to force rebuilding kdump initrd every time when kdump # Specify 1 to force rebuilding kdump initrd every time when kdump

View File

@ -155,9 +155,11 @@ reboot: Reboot the system (this is what most people will want, as it returns the
to a normal state). halt: Halt the system and lose the vmcore. poweroff: The system to a normal state). halt: Halt the system and lose the vmcore. poweroff: The system
will be powered down. shell: Drop to a shell session inside the initramfs, from which will be powered down. shell: Drop to a shell session inside the initramfs, from which
you can manually perform additional recovery actions. Exiting this shell reboots the you can manually perform additional recovery actions. Exiting this shell reboots the
system. Note: kdump uses bash as the default shell. dump_to_rootfs: If non-root dump system by default or performs "final_action".
Note: kdump uses bash as the default shell. dump_to_rootfs: If non-root dump
target is specified, the failure action can be set as dump_to_rootfs. That means when target is specified, the failure action can be set as dump_to_rootfs. That means when
dumping to target fails, dump vmcore to rootfs from initramfs context and reboot. dumping to target fails, dump vmcore to rootfs from initramfs context and reboot
by default or perform "final_action".
.RE .RE
.B default <reboot | halt | poweroff | shell | dump_to_rootfs> .B default <reboot | halt | poweroff | shell | dump_to_rootfs>
@ -166,6 +168,14 @@ Same as the "failure_action" directive above, but this directive is obsolete
and will be removed in the future. and will be removed in the future.
.RE .RE
.B final_action <reboot | halt | poweroff>
.RS
Action to perform in case dumping to the intended target succeeds.
Also performed when "shell" or "dump_to_rootfs" failure action finishes.
Each action is same as the "failure_action" directive above.
The default is "reboot".
.RE
.B force_rebuild <0 | 1> .B force_rebuild <0 | 1>
.RS .RS
By default, kdump initrd will only be rebuilt when necessary. By default, kdump initrd will only be rebuilt when necessary.

View File

@ -228,7 +228,7 @@ check_config()
case "$config_opt" in case "$config_opt" in
\#* | "") \#* | "")
;; ;;
raw|ext2|ext3|ext4|minix|btrfs|xfs|nfs|ssh|sshkey|path|core_collector|kdump_post|kdump_pre|extra_bins|extra_modules|failure_action|default|force_rebuild|force_no_rebuild|dracut_args|fence_kdump_args|fence_kdump_nodes) raw|ext2|ext3|ext4|minix|btrfs|xfs|nfs|ssh|sshkey|path|core_collector|kdump_post|kdump_pre|extra_bins|extra_modules|failure_action|default|final_action|force_rebuild|force_no_rebuild|dracut_args|fence_kdump_args|fence_kdump_nodes)
# remove inline comments after the end of a directive. # remove inline comments after the end of a directive.
config_val=$(strip_comments $config_val) config_val=$(strip_comments $config_val)
[ -z "$config_val" ] && { [ -z "$config_val" ] && {
@ -248,6 +248,7 @@ check_config()
done < $KDUMP_CONFIG_FILE done < $KDUMP_CONFIG_FILE
check_failure_action_config || return 1 check_failure_action_config || return 1
check_final_action_config || return 1
check_fence_kdump_config || return 1 check_fence_kdump_config || return 1
@ -966,6 +967,25 @@ check_failure_action_config()
esac esac
} }
check_final_action_config()
{
local final_action
final_action=$(awk '$1 ~ /^final_action$/ {print $2;}' $KDUMP_CONFIG_FILE)
if [ -z "$final_action" ]; then
return 0
else
case "$final_action" in
reboot|halt|poweroff)
return 0
;;
*)
echo $"Usage kdump.conf: final_action {reboot|halt|poweroff}"
return 1
esac
fi
}
start() start()
{ {
check_dump_feasibility check_dump_feasibility