-----Original Message-----
From: Kairui Song [mailto:kasong@redhat.com]
Sent: Wednesday, October 30, 2019 6:35 PM
To: kexec(a)lists.fedoraproject.org
Cc: Pingfan Liu <piliu(a)redhat.com>; Dave Young <dyoung(a)redhat.com>;
Hatayama,
Daisuke/畑山 大輔 <d.hatayama(a)fujitsu.com>; Kairui Song <kasong(a)redhat.com>
Subject: [PATCH] Don't execute final_action if failure_action terminates the
system
If failure_action is shutdown/reboot/halt, final_action is pointless as
the system will be already stopping. And if final_action is different
from failure_action, it will trigger a systemd race problem and cause
unexpected behavior to occur.
So let the error handler stop and exit after performing failure_action
successfully if failure_action is one of shutdown/reboot/halt.
This way, final_action will not be executed.
Signed-off-by: Kairui Song <kasong(a)redhat.com>
---
kdump-lib-initramfs.sh | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/kdump-lib-initramfs.sh b/kdump-lib-initramfs.sh
index c409dce..8530556 100755
--- a/kdump-lib-initramfs.sh
+++ b/kdump-lib-initramfs.sh
@@ -56,13 +56,13 @@ get_kdump_confs()
FAILURE_ACTION="kdump_emergency_shell"
;;
reboot)
- FAILURE_ACTION="systemctl reboot -f"
+ FAILURE_ACTION="systemctl reboot -f && exit"
Can -f option here also be removed?
;;
halt)
- FAILURE_ACTION="halt"
+ FAILURE_ACTION="halt && exit"
It's better to replace halt with systemctl halt as suggested by Dave.
;;
poweroff)
- FAILURE_ACTION="systemctl poweroff -f"
+ FAILURE_ACTION="systemctl poweroff -f && exit"
Ditto.
I also checked the behavior when FAILURE_ACTION="exit" for in case, i.e.
the situation where shutdown/halt/reboot doesn't work well for some reason
even though it terminates with successful exit status.
The result is infinite loop like:
kdump-capture.serviec pulls in emergency.target on failrue
=> emergency.target pulls in emergency.service
=> emergency.service isolates kdump-error-handler.service
=> kdump-error-handler.service isolates default.target (= initrd.target) on
ExecStopPost=
=> initrd.target pulls in kdump-capture.service
I think there is a room to improve this design in another work.
;;
dump_to_rootfs)
FAILURE_ACTION="dump_to_rootfs"
--
2.21.0