From 3095c3741f0f22b2204d7780aff00d8df3020693 Mon Sep 17 00:00:00 2001 From: Pratyush Anand Date: Wed, 20 Jul 2016 23:42:20 +0530 Subject: [PATCH] mkdumprd: Add dracut watchdog module as default option If dracut watchdog module is enabled then, it includes kernel watchdog module of active watchdog device in initramfs. kdump.conf has an option to modify dracut_args. So, if an user passes "-a watchdog" in dracut_args then dracut will add kernel watchdog module of active watchdog device in initramfs. Since, kexec-tools always requires to add kernel watchdog module of active watchdog device in initramfs, therefore even when an user does not pass any watchdog option and there exists at least one active watchdog device then also kexec-tools adds "-a watchdog" in dracut args. Therefore, if an user does not want to add kernel watchdog module in initramfs then the person must pass "-o watchdog" in dracut_args. Signed-off-by: Pratyush Anand Acked-by: Dave Young --- kdump-lib.sh | 24 ++++++++++++++++++++++++ mkdumprd | 20 +++++++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/kdump-lib.sh b/kdump-lib.sh index 141a561..4567a05 100755 --- a/kdump-lib.sh +++ b/kdump-lib.sh @@ -382,3 +382,27 @@ get_ifcfg_filename() { echo -n "${ifcfg_file}" } + +# returns 0 when omission of watchdog module is desired in dracut_args +# returns 1 otherwise +is_wdt_mod_omitted() { + local dracut_args + local ret=1 + + dracut_args=$(grep "^dracut_args" /etc/kdump.conf) + [[ -z $dracut_args ]] && return $ret + + eval set -- $dracut_args + while :; do + [[ -z $1 ]] && break + case $1 in + -o|--omit) + echo $2 | grep -qw "watchdog" + [[ $? == 0 ]] && ret=0 + break + esac + shift + done + + return $ret +} diff --git a/mkdumprd b/mkdumprd index eb0d5e0..2791613 100644 --- a/mkdumprd +++ b/mkdumprd @@ -16,8 +16,26 @@ SAVE_PATH=$(grep ^path $conf_file| cut -d' ' -f2) # strip the duplicated "/" SAVE_PATH=$(echo $SAVE_PATH | tr -s /) +is_wdt_addition_needed() { + local active + + is_wdt_mod_omitted + [[ $? -eq 0 ]] && return 1 + [[ -d /sys/class/watchdog/ ]] || return 1 + for dir in /sys/class/watchdog/*; do + [[ -f "$dir/state" ]] || continue + active=$(< "$dir/state") + [[ "$active" = "active" ]] && return 0 + done + return 1 +} + +WDTCFG="" +is_wdt_addition_needed +[[ $? -eq 0 ]] && WDTCFG="-a watchdog" + extra_modules="" -dracut_args=("--hostonly" "-o" "plymouth dash resume ifcfg") +dracut_args=("--hostonly" "-o" "plymouth dash resume ifcfg" $WDTCFG) OVERRIDE_RESETTABLE=0 add_dracut_arg() {