On 04/01/2014 03:28 PM, Dave Young wrote:
On 02/27/14 at 01:51pm, Hari Bathini wrote:
> Take a backup of original initrd when fadump is used first time or
> when user has switched from kdump to fadump. This will allow us to
> fall back to original initrd when kdump service fails to rebuild
> the fadump ready default initrd. Also, if the user switches from
> fadump to kdump, then the original initrd will be restored when
> kdump script is run first time after the switch.
>
> Signed-off-by: Mahesh Salgaonkar<mahesh(a)linux.vnet.ibm.com>
> Signed-off-by: Hari Bathini<hbathini(a)linux.vnet.ibm.com>
> ---
> kdumpctl | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++------------
> 1 file changed, 83 insertions(+), 19 deletions(-)
>
> diff --git a/kdumpctl b/kdumpctl
> index bbc2779..2eb52a5 100755
> --- a/kdumpctl
> +++ b/kdumpctl
> @@ -15,6 +15,7 @@ FADUMP_REGISTER_SYS_NODE="/sys/kernel/fadump_registered"
> . /lib/kdump/kdump-lib.sh
>
> standard_kexec_args="-p"
> +declare -i image_time
>
> if [ -f /etc/sysconfig/kdump ]; then
> . /etc/sysconfig/kdump
> @@ -31,12 +32,25 @@ determine_dump_mode()
> # kdump shall be the default dump mode
> dump_mode="kdump"
>
> + if [ -z "$KDUMP_KERNELVER" ]; then
> + kdump_kver=`uname -r`
> + else
> + kdump_kver=$KDUMP_KERNELVER
> + fi
> +
> + default_initrd="${KDUMP_BOOTDIR}/initramfs-${kdump_kver}.img"
> + kdump_initrd="${KDUMP_BOOTDIR}/initramfs-${kdump_kver}kdump.img"
> + default_initrd_bak="$default_initrd.default.bak"
> +
> # Check if firmware-assisted dump is enabled
> # if yes, set the dump mode as fadump
> if is_fadump_capable; then
> echo "Using dump mode fadump"
> dump_mode="fadump"
> fi
> +
> + # Handle dump mode switch from kdump to fadump OR fadump to kdump
> + handle_dump_mode_switch
> }
>
> # remove_cmdline_param <kernel cmdline> <param1> [<param2>] ...
[<paramN>]
> @@ -83,6 +97,10 @@ function save_core()
>
> function rebuild_initrd()
> {
> + if [ $dump_mode == "fadump" ]; then
> + backup_default_initrd
> + fi
> +
> $MKDUMPRD $kdump_initrd $kdump_kver
> if [ $? != 0 ]; then
> echo "mkdumprd: failed to make kdump initrd" >&2
> @@ -112,6 +130,61 @@ function check_executable()
> done
> }
>
> +backup_default_initrd()
> +{
> + # Check if backup initrd is already present. If not, then
> + # this is the first time fadump is being used OR user
> + # has switched from kdump to fadump.
> + # Take a backup of the original default initrd before
> + # we rebuild default initrd for fadump support.
> + if [ ! -e $default_initrd_bak ];then
> + echo "Backing up default initrd"
> + cp $default_initrd $default_initrd_bak
> + sync
> + fi
> +}
> +
> +handle_dump_mode_switch()
> +{
> + if [ $dump_mode == "fadump" ]; then
> + if [ -e $kdump_initrd ];then
> + # This means user has switched from kdump to fadump.
> + # Remove kdump initrd which is no longer needed
> + rm -f $kdump_initrd
> + fi
> + else
> + if [ -e $default_initrd_bak ];then
> + # !fadump and original initrd backup file exists.
> + # This means user has switched from fadump to kdump.
> + # Restore the original default initrd.
> + mv $default_initrd_bak $default_initrd
> + sync
> + fi
> + fi
> +}
> +
> +find_initrd_image_time()
> +{
> + image_time=0
> +
> + # Check to see if dependent files have been modified
> + # since last build of the image file
> + if [ $dump_mode == "fadump" ]; then
> + # If this is the 1st time we are using fadump then let image_time be
> + # zero to force rebuild initrd. The non-existance of backup initrd
> + # means this is the 1st time fadump is being used. If it exists then
> + # return the image time of default initrd.
> + if [ -e $default_initrd_bak ]; then
> + image_time=`stat -c "%Y" $default_initrd 2>/dev/null`
> + fi
> + else
> + if [ -f $kdump_initrd ]; then
> + image_time=`stat -c "%Y" $kdump_initrd 2>/dev/null`
> + return
> + fi
> + fi
> +}
> +
> function check_config()
> {
> local nr
> @@ -171,14 +244,7 @@ function check_rebuild()
> local extra_modules modified_files=""
> local _force_rebuild force_rebuild="0"
>
> - if [ -z "$KDUMP_KERNELVER" ]; then
> - kdump_kver=`uname -r`
> - else
> - kdump_kver=$KDUMP_KERNELVER
> - fi
> -
>
kdump_kernel="${KDUMP_BOOTDIR}/${KDUMP_IMG}-${kdump_kver}${KDUMP_IMG_EXT}"
> - kdump_initrd="${KDUMP_BOOTDIR}/initramfs-${kdump_kver}kdump.img"
>
> _force_rebuild=`grep ^force_rebuild $KDUMP_CONFIG_FILE 2>/dev/null`
> if [ $? -eq 0 ]; then
> @@ -193,13 +259,9 @@ function check_rebuild()
> extra_modules=`grep ^extra_modules $KDUMP_CONFIG_FILE`
> [ -n "$extra_modules" ] && force_rebuild="1"
>
> - #check to see if dependent files has been modified
> - #since last build of the image file
> - if [ -f $kdump_initrd ]; then
> - image_time=`stat -c "%Y" $kdump_initrd 2>/dev/null`
> - else
> - image_time=0
> - fi
> + # Find initrd image time based on whether dependent files have been
> + # modified since last build of the image file
> + find_initrd_image_time
>
> #also rebuild when cluster conf is changed and fence kdump is enabled.
> check_fence_kdump $image_time && modified_files="cluster-cib"
> @@ -225,12 +287,14 @@ function check_rebuild()
> fi
> done
>
> - if [ $image_time -eq 0 ]; then
> - echo -n "No kdump initial ramdisk found."; echo
> - elif [ "$force_rebuild" != "0" ]; then
> - echo -n "Force rebuild $kdump_initrd"; echo
> + if [ $dump_mode == "kdump" ]; then
> + if [ $image_time -eq 0 ]; then
> + echo -n "No kdump initial ramdisk found."; echo
> + elif [ "$force_rebuild" != "0" ]; then
> + echo -n "Force rebuild $kdump_initrd"; echo
> + fi
> elif [ -n "$modified_files" ]; then
The above if elif logic looks different from original ones?
Messages are put under "kdump" dump mode if condition because:
1. there is no separate initial ramdisk for fadump as in the case of
"kdump" mode..
2. there is a message in rebuild_fadump_initrd() that conveys the same..
Thanks
Hari
> - echo "Detected change(s) the following file(s):"
> + echo "Detected change(s) in the following file(s):"
> echo -n " "; echo "$modified_files" | sed 's/\s/\n
/g'
> else
> return 0
>
> _______________________________________________
> kexec mailing list
> kexec(a)lists.fedoraproject.org
>
https://lists.fedoraproject.org/mailman/listinfo/kexec