Hi Pingfan, thanks for the review, I've sent V2 that use ondemand
mount for both kdump and fadump, please have a look.
On Fri, Sep 27, 2019 at 10:02 PM piliu <piliu(a)redhat.com> wrote:
On 09/27/2019 06:58 PM, Kairui Song wrote:
> This helps to reduce the risk of boot failure, and may also help speed
> up the boot by a bit.
>
> And currently there is a failure that caused by some mount handling
> bug with kernel and systemd that is failing the system booting:
>
> [FAILED] Failed to mount /kdumproot/home.
> See 'systemctl status kdumproot-home.mount' for details.
> [DEPEND] Dependency failed for Local File Systems.
> [ OK ] Reached target Remote File Systems (Pre).
> [ OK ] Reached target Remote File Systems.
> Starting udev Coldplug all Devices...
> Starting Create Volatile Files and Directories...
> Starting Kdump Emergency...
>
> This patch can bypass it. The fix of root cause is still WIP, but this
> patch itself is a nice to have optimization so it's reasonable to do so.
>
> Signed-off-by: Kairui Song <kasong(a)redhat.com>
> ---
> kdump-lib-initramfs.sh | 30 +++++++++++++++++++++++++-----
> mkdumprd | 5 +++++
> 2 files changed, 30 insertions(+), 5 deletions(-)
>
> diff --git a/kdump-lib-initramfs.sh b/kdump-lib-initramfs.sh
> index 608dc6e..0a2429b 100755
> --- a/kdump-lib-initramfs.sh
> +++ b/kdump-lib-initramfs.sh
> @@ -96,16 +96,31 @@ get_kdump_confs()
> # dump_fs <mount point| device>
> dump_fs()
> {
> -
> + local _do_umount
> local _dev=$(findmnt -k -f -n -r -o SOURCE $1)
> local _mp=$(findmnt -k -f -n -r -o TARGET $1)
> local _op=$(findmnt -k -f -n -r -o OPTIONS $1)
>
> - echo "kdump: dump target is $_dev"
> -
> if [ -z "$_mp" ]; then
> - echo "kdump: error: Dump target $_dev is not mounted."
> - return 1
> + _dev=$(findmnt -s -f -n -r -o SOURCE $1)
> + _mp=$(findmnt -s -f -n -r -o TARGET $1)
> + _op=$(findmnt -s -f -n -r -o OPTIONS $1)
> +
> + if [ -n "$_dev" ] && [ -n "$_mp" ]; then
> + echo "kdump: dump target $_dev is not mounted, trying to
mount..."
> + mkdir -p $_mp
> + mount -o $_op $_dev $_mp
> +
> + if [ $? -ne 0 ]; then
> + echo "kdump: mounting failed (mount point: $_mp, option:
$_op)"
> + return 1
> + fi
> + _do_umount=1
> + else
> + echo "kdump: error: Dump target $_dev is not usable"
> + fi
> + else
> + echo "kdump: dump target is $_dev"
> fi
>
> # Remove -F in makedumpfile case. We don't want a flat format dump here.
> @@ -129,6 +144,11 @@ dump_fs()
> sync
>
> echo "kdump: saving vmcore complete"
> +
> + if [ $_do_umount ]; then
> + umount $_mp || echo "kdump: warn: failed to umount target"
> + fi
> +
> # improper kernel cmdline can cause the failure of echo, we can ignore this
kind of failure
> return 0
> }
> diff --git a/mkdumprd b/mkdumprd
> index cf3533f..2526351 100644
> --- a/mkdumprd
> +++ b/mkdumprd
> @@ -115,6 +115,11 @@ to_mount() {
> _options=$(echo $_options | sed 's/\(^\|,\)nofail\($\|,\)/\1/g')
> _options=$(echo $_options | sed 's/\(^\|,\)nobootwait\($\|,\)/\1/g')
>
> + # Only for fadump, don't mount the dump target unless needed.
> + if is_fadump_capable; then
> + _options="$_options,noauto"
> + fi
> +
> _mntopts="$_target $_fstype $_options"
> #for non-nfs _dev converting to use udev persistent name
> if [ -b "$_source" ]; then
>
Discussed with Kairui offline. I think this is a smart method to step
around the systemd mount bug.
Acked-by: Pingfan Liu <piliu(a)redhat.com>
--
Best Regards,
Kairui Song