try to update the crashkernel in GRUB_ETC_DEFAULT after kexec-tools updates the default crashkernel value

Upstream: fedora
Conflict: none
Resolves: bz2060774

commit 6d4062a936
Author: Coiby Xu <coxu@redhat.com>
Date:   Wed Feb 16 09:42:54 2022 +0800

    try to update the crashkernel in GRUB_ETC_DEFAULT after kexec-tools updates the default crashkernel value

    If GRUB_ETC_DEFAULT use crashkernel=auto or
    crashkernel=OLD_DEFAULT_CRASHKERNEL, it should be updated as well.

    Add a helper function to read kernel cmdline parameter from
    GRUB_ETC_DEFAULT. This function is used to read kernel cmdline
    parameter like fadump or crashkernel.

    Reviewed-by: Philipp Rudo <prudo@redhat.com>

Signed-off-by: Tao Liu <ltao@redhat.com>
This commit is contained in:
Tao Liu 2022-04-08 15:09:43 +08:00
parent 738bf03f04
commit dd05affb9f

View File

@ -1470,6 +1470,16 @@ _update_kernel_arg_in_grub_etc_default()
}" "$GRUB_ETC_DEFAULT"
}
# Read the kernel arg in default grub conf.
# Note reading a kernel parameter that doesn't have a value isn't supported.
#
# $1: the name of the kernel command line parameter
_read_kernel_arg_in_grub_etc_default()
{
sed -n -E "s/^GRUB_CMDLINE_LINUX=.*[[:space:]\"]${1}=([^[:space:]\"]*).*$/\1/p" "$GRUB_ETC_DEFAULT"
}
reset_crashkernel()
{
local _opt _val _dump_mode _fadump_val _reboot _grubby_kernel_path _kernel _kernels
@ -1603,6 +1613,34 @@ reset_crashkernel()
fi
}
# update the crashkernel value in GRUB_ETC_DEFAULT if necessary
#
# called by reset_crashkernel_after_update and inherit its array variable
# _crashkernel_vals
update_crashkernel_in_grub_etc_default_after_update()
{
local _crashkernel _fadump_val
local _dump_mode _old_default_crashkernel _new_default_crashkernel
_crashkernel=$(_read_kernel_arg_in_grub_etc_default crashkernel)
if [[ -z $_crashkernel ]]; then
return
fi
_fadump_val=$(_read_kernel_arg_in_grub_etc_default fadump)
_dump_mode=$(get_dump_mode_by_fadump_val "$_fadump_val")
_old_default_crashkernel=${_crashkernel_vals[old_${_dump_mode}]}
_new_default_crashkernel=${_crashkernel_vals[new_${_dump_mode}]}
if [[ $_crashkernel == auto ]] ||
[[ $_crashkernel == "$_old_default_crashkernel" &&
$_new_default_crashkernel != "$_old_default_crashkernel" ]]; then
_update_kernel_arg_in_grub_etc_default crashkernel "$_new_default_crashkernel"
fi
}
# shellcheck disable=SC2154 # false positive when dereferencing an array
reset_crashkernel_after_update()
{
@ -1631,6 +1669,8 @@ reset_crashkernel_after_update()
fi
fi
done
update_crashkernel_in_grub_etc_default_after_update
}
# read the value of an environ variable from given environ file path