Both functions are almost identical. The only differences are (1) the
sysfs node the status is read from and (2) the fact the fadump version
doesn't verify if the file it's trying to read actually exists. Thus
merge the two functions and get rid of the check_current_status wrapper.
While at it rename the function to is_kernel_loaded which explains
better what the function does.
Finally, after moving FADUMP_REGISTER_SYS_NODE shellcheck can no longer
access the definition and starts complaining about it not being quoted.
Thus quote all uses of FADUMP_REGISTER_SYS_NODE.
Signed-off-by: Philipp Rudo <prudo(a)redhat.com>
---
dracut-early-kdump.sh | 2 +-
kdump-lib.sh | 29 +++++++++++++++++++++--------
kdumpctl | 34 ++++++++--------------------------
3 files changed, 30 insertions(+), 35 deletions(-)
diff --git a/dracut-early-kdump.sh b/dracut-early-kdump.sh
index f8d4e0f..044f741 100755
--- a/dracut-early-kdump.sh
+++ b/dracut-early-kdump.sh
@@ -37,7 +37,7 @@ early_kdump_load()
return 1
fi
- if check_current_kdump_status; then
+ if is_kernel_loaded "kdump"; then
return 1
fi
diff --git a/kdump-lib.sh b/kdump-lib.sh
index 400b05c..c3091c8 100755
--- a/kdump-lib.sh
+++ b/kdump-lib.sh
@@ -9,6 +9,7 @@ else
fi
FADUMP_ENABLED_SYS_NODE="/sys/kernel/fadump_enabled"
+FADUMP_REGISTER_SYS_NODE="/sys/kernel/fadump_registered"
is_fadump_capable()
{
@@ -494,19 +495,31 @@ check_kdump_feasibility()
return $?
}
-check_current_kdump_status()
+is_kernel_loaded()
{
- if [[ ! -f /sys/kernel/kexec_crash_loaded ]]; then
- derror "Perhaps CONFIG_CRASH_DUMP is not enabled in kernel"
+ local _sysfs _mode
+
+ _mode=$1
+
+ case "$_mode" in
+ kdump)
+ _sysfs="/sys/kernel/kexec_crash_loaded"
+ ;;
+ fadump)
+ _sysfs="$FADUMP_REGISTER_SYS_NODE"
+ ;;
+ *)
+ derror "Unknown dump mode '$_mode' provided"
return 1
- fi
+ ;;
+ esac
- rc=$(< /sys/kernel/kexec_crash_loaded)
- if [[ $rc == 1 ]]; then
- return 0
- else
+ if [[ ! -f $_sysfs ]]; then
+ derror "$_mode is not supported on this kernel"
return 1
fi
+
+ [[ $(< $_sysfs) -eq 1 ]]
}
# remove_cmdline_param <kernel cmdline> <param1> [<param2>] ...
[<paramN>]
diff --git a/kdumpctl b/kdumpctl
index 8a06c2e..71f72b5 100755
--- a/kdumpctl
+++ b/kdumpctl
@@ -14,7 +14,6 @@ DEFAULT_INITRD_BAK=""
INITRD_CHECKSUM_LOCATION=""
KDUMP_INITRD=""
TARGET_INITRD=""
-FADUMP_REGISTER_SYS_NODE="/sys/kernel/fadump_registered"
#kdump shall be the default dump mode
DEFAULT_DUMP_MODE="kdump"
image_time=0
@@ -837,23 +836,6 @@ show_reserved_mem()
dinfo "Reserved ${mem_mb}MB memory for crash kernel"
}
-check_current_fadump_status()
-{
- # Check if firmware-assisted dump has been registered.
- rc=$(< $FADUMP_REGISTER_SYS_NODE)
- [[ $rc -eq 1 ]] && return 0
- return 1
-}
-
-check_current_status()
-{
- if [[ $DEFAULT_DUMP_MODE == "fadump" ]]; then
- check_current_fadump_status
- else
- check_current_kdump_status
- fi
-}
-
save_raw()
{
local raw_target
@@ -974,8 +956,8 @@ check_dump_feasibility()
start_fadump()
{
- echo 1 > $FADUMP_REGISTER_SYS_NODE
- if ! check_current_fadump_status; then
+ echo 1 > "$FADUMP_REGISTER_SYS_NODE"
+ if ! is_kernel_loaded "fadump"; then
derror "fadump: failed to register"
return 1
fi
@@ -1040,7 +1022,7 @@ start()
return 1
fi
- if [[ $DEFAULT_DUMP_MODE == "kdump" ]] && check_current_kdump_status;
then
+ if [[ $DEFAULT_DUMP_MODE == "kdump" ]] && is_kernel_loaded
"kdump"; then
dwarn "Kdump already running: [WARNING]"
return 0
fi
@@ -1065,7 +1047,7 @@ start()
reload()
{
- if ! check_current_status; then
+ if ! is_kernel_loaded "$DEFAULT_DUMP_MODE"; then
dwarn "Kdump was not running: [WARNING]"
fi
@@ -1096,8 +1078,8 @@ reload()
stop_fadump()
{
- echo 0 > $FADUMP_REGISTER_SYS_NODE
- if check_current_fadump_status; then
+ echo 0 > "$FADUMP_REGISTER_SYS_NODE"
+ if is_kernel_loaded "fadump"; then
derror "fadump: failed to unregister"
return 1
fi
@@ -1126,7 +1108,7 @@ stop_kdump()
reload_fadump()
{
- if echo 1 > $FADUMP_REGISTER_SYS_NODE; then
+ if echo 1 > "$FADUMP_REGISTER_SYS_NODE"; then
dinfo "fadump: re-registered successfully"
return 0
else
@@ -1740,7 +1722,7 @@ main()
;;
status)
EXIT_CODE=0
- check_current_status
+ is_kernel_loaded "$DEFAULT_DUMP_MODE"
case "$?" in
0)
dinfo "Kdump is operational"
--
2.39.0