On 07/07/17 at 03:48pm, Xunlei Pang wrote:
Resolves: bz1451717 https://bugzilla.redhat.com/1451717
When there is any "rd.lvm.lv=X", "lvm" dracut module will try to recognize all the lvm volumes which is unnecessary and probably cause trouble for us.
See https://bugzilla.redhat.com/show_bug.cgi?id=1451717#c2
Remove all the rd.lvm.lv=X inherited from the kernel cmdline, and generate the corresponding cmdline as needed for kdump. Because prepare_cmdline() is only used by kdump, we don't need to add any fadump judgement(also remove the existing judgement in passing).
Currently, we don't handle "rd.lvm.vg=X", we can add it in when there is some bug reported in the future.
Signed-off-by: Xunlei Pang xlpang@redhat.com
v3->v4: -Made "GENERATED_LVM_CMDLINES" a local variable "lvm_cmdlines".
kdumpctl | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-)
diff --git a/kdumpctl b/kdumpctl index 8c40564..3405530 100755 --- a/kdumpctl +++ b/kdumpctl @@ -171,6 +171,46 @@ check_kdump_cpus() echo " try nr_cpus=$nr_min or larger instead" }
+# Generate rd.lvm.lv=X for the kdump targets if any. +generate_lvm_cmdline() +{
- local majmin=$1 dev
- [ -d "/sys/dev/block/$majmin/dm" ] || return 0
- dev=/dev/mapper/$(< "/sys/dev/block/$majmin/dm/name")
- vg=$(lvm lvs --rows $dev -o vg_name --separator=* 2>/dev/null | cut -d "*" -f 2)
- lv=$(lvm lvs --rows $dev -o lv_name --separator=* 2>/dev/null | cut -d "*" -f 2)
- if [ -n "$vg" -a -n "$lv" ]; then
lvm_cmdlines="rd.lvm.lv=$vg/$lv $lvm_cmdlines"
- fi
- return 0
+}
+generate_lvm_cmdlines() +{
- local lvm_cmdlines=""
- for_each_block_target_all generate_lvm_cmdline
Since lvm_cmdlines becomes a local variable, it is better to move function generate_lvm_cmdline code into getnerate_lvm_cmdlines directly
It is less likely we need generate lvm_cmdline for a specific block target.
Sorry for observed this late, I think this is the only comment for me to this series, other than this, the whole series looks good to me.
Can you resend this patch only if agree with above?
After waiting for several days I can merge the series if no other comments from other people.
- echo "$lvm_cmdlines"
+}
+# $1: function name +for_each_block_target_all() +{
- local dev majmin
- for dev in $(get_kdump_targets); do
[ -b "$dev" ] || continue
majmin=$(get_maj_min $dev)
check_block_and_slaves_all $1 $majmin
- done
- return 0
+}
# This function performs a series of edits on the command line. # Store the final result in global $KDUMP_COMMANDLINE. prepare_cmdline() @@ -190,15 +230,19 @@ prepare_cmdline()
# Always remove "root=X", as we now explicitly generate all kinds # of dump target mount information including root fs. But we can
- # not remove it in case of fadump or "default dump_to_rootfs".
- # not remove it in case of "default dump_to_rootfs". # # We do this before KDUMP_COMMANDLINE_APPEND, if one really cares # about it(e.g. for debug purpose), then can pass "root=X" using # KDUMP_COMMANDLINE_APPEND.
- if [ $DEFAULT_DUMP_MODE != "fadump" ] && ! is_dump_to_rootfs; then
if ! is_dump_to_rootfs; then cmdline=`remove_cmdline_param "$cmdline" root` fi
# Remove all the inherited rd.lvm.lv=X and generate those as needed.
cmdline=`remove_cmdline_param "$cmdline" rd.lvm.lv`
cmdline="${cmdline} $(generate_lvm_cmdlines)"
cmdline="${cmdline} ${KDUMP_COMMANDLINE_APPEND}"
id=`get_bootcpu_initial_apicid`
-- 1.8.3.1 _______________________________________________ kexec mailing list -- kexec@lists.fedoraproject.org To unsubscribe send an email to kexec-leave@lists.fedoraproject.org
Thanks Dave