From 7c48f71b6f2639ea2a3d35fcb468b31b88d54649 Mon Sep 17 00:00:00 2001 From: WANG Chao Date: Mon, 2 Sep 2013 15:32:23 +0800 Subject: [PATCH] kdump.sysconfig: default to "nofail" mount Currently we have two issues against mounting filesystems by systemd. 1. If any failure in sysroot.mount, initrd.target won't be reached. 2. If any failure in mounting /etc/fstab, initrd.target won't be reached Our kdump.sh is in dracut-pre-pivot hook which is ordered after initrd.target. That means if systemd doesn't reach initrd.target, pre-pivot service will not run. Based on above, we can conclude that in order to run kdump.sh, initrd.target must be reached. To fix issue 1), we can add rootflags=nofail to 2nd kernel cmdline, so that initrd.target will not require sysroot.mount. initrd.target wouldn't care about the failures in sysroot.mount. That means initrd.target can always be reached whether or not sysroot.mount fails. So when initrd.target is reached, kdump.sh can be run. To fix issue 2), we can append "nofail" mount options to every entry in /etc/fstab. It has almost the same affects as to sysroot.mount. initrd.target can be reached whether or not mount /etc/fstab fails. So when initrd.target is reached, kdump.sh can be run. If the mount failures block kdump from working properly (for example, the dump target isn't mounted), the error handling will be done by "default" action specified in /etc/kdump.conf. Otherwise kdump will ignore the mount failures and dump as expected. Signed-off-by: WANG Chao Acked-by: Vivek Goyal Acked-by: Dave Young --- kdump.sysconfig.i386 | 2 +- kdump.sysconfig.ppc64 | 2 +- kdump.sysconfig.s390x | 2 +- kdump.sysconfig.x86_64 | 2 +- mkdumprd | 1 + 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/kdump.sysconfig.i386 b/kdump.sysconfig.i386 index 1425ce1..0d26a66 100644 --- a/kdump.sysconfig.i386 +++ b/kdump.sysconfig.i386 @@ -16,7 +16,7 @@ KDUMP_COMMANDLINE="" # This variable lets us append arguments to the current kdump commandline # As taken from either KDUMP_COMMANDLINE above, or from /proc/cmdline -KDUMP_COMMANDLINE_APPEND="irqpoll nr_cpus=1 reset_devices numa=off udev.children-max=2 panic=10" +KDUMP_COMMANDLINE_APPEND="irqpoll nr_cpus=1 reset_devices numa=off udev.children-max=2 panic=10 rootflags=nofail" # Any additional kexec arguments required. In most situations, this should # be left empty diff --git a/kdump.sysconfig.ppc64 b/kdump.sysconfig.ppc64 index 22e7bd5..ca7e1d8 100644 --- a/kdump.sysconfig.ppc64 +++ b/kdump.sysconfig.ppc64 @@ -16,7 +16,7 @@ KDUMP_COMMANDLINE="" # This variable lets us append arguments to the current kdump commandline # As taken from either KDUMP_COMMANDLINE above, or from /proc/cmdline -KDUMP_COMMANDLINE_APPEND="irqpoll maxcpus=1 noirqdistrib reset_devices cgroup_disable=memory numa=off udev.children-max=2 ehea.use_mcs=0 panic=10" +KDUMP_COMMANDLINE_APPEND="irqpoll maxcpus=1 noirqdistrib reset_devices cgroup_disable=memory numa=off udev.children-max=2 ehea.use_mcs=0 panic=10 rootflags=nofail" # Any additional kexec arguments required. In most situations, this should # be left empty diff --git a/kdump.sysconfig.s390x b/kdump.sysconfig.s390x index 129b205..b55515a 100644 --- a/kdump.sysconfig.s390x +++ b/kdump.sysconfig.s390x @@ -16,7 +16,7 @@ KDUMP_COMMANDLINE="" # This variable lets us append arguments to the current kdump commandline # As taken from either KDUMP_COMMANDLINE above, or from /proc/cmdline -KDUMP_COMMANDLINE_APPEND="maxcpus=1 cgroup_disable=memory numa=off udev.children-max=2 panic=10" +KDUMP_COMMANDLINE_APPEND="maxcpus=1 cgroup_disable=memory numa=off udev.children-max=2 panic=10 rootflags=nofail" # Any additional /sbin/mkdumprd arguments required. MKDUMPRD_ARGS="" diff --git a/kdump.sysconfig.x86_64 b/kdump.sysconfig.x86_64 index a143b5c..7e4d611 100644 --- a/kdump.sysconfig.x86_64 +++ b/kdump.sysconfig.x86_64 @@ -16,7 +16,7 @@ KDUMP_COMMANDLINE="" # This variable lets us append arguments to the current kdump commandline # As taken from either KDUMP_COMMANDLINE above, or from /proc/cmdline -KDUMP_COMMANDLINE_APPEND="irqpoll nr_cpus=1 reset_devices cgroup_disable=memory mce=off numa=off udev.children-max=2 panic=10" +KDUMP_COMMANDLINE_APPEND="irqpoll nr_cpus=1 reset_devices cgroup_disable=memory mce=off numa=off udev.children-max=2 panic=10 rootflags=nofail" # Any additional kexec arguments required. In most situations, this should # be left empty diff --git a/mkdumprd b/mkdumprd index 3e6061e..6de1755 100644 --- a/mkdumprd +++ b/mkdumprd @@ -103,6 +103,7 @@ to_mount() { _t=$(findmnt -k -f -n -r -o TARGET,FSTYPE $_dev) _o=$(findmnt -k -f -n -r -o OPTIONS $_dev) _o=${_o/#ro/rw} #mount fs target as rw in 2nd kernel + _o="${_o},nofail" #with nofail set, systemd won't block for mount failure _mntopts="$_t $_o" #for non-nfs _dev converting to use udev persistent name if [ -b "$_s" ]; then