From 5f3aadd9ae372aaaffb2fd1545f82641bd93c3ad8dec60482c65e3a3a5080ab7 Mon Sep 17 00:00:00 2001 From: Robert Milasan Date: Fri, 27 Jun 2014 07:31:06 +0000 Subject: [PATCH] Accepting request 238799 from home:hreinecke:branches:Base:System - 95dasd_rules: Fixup rd.dasd parsing * Add: 0079-95dasd_rules-fixup-rd.dasd-parsing.patch - 95dasd_rules: Print out rd.dasd command-line * Add: 0080-95dasd_rules-print-out-rd.dasd-commandline.patch - 95dasd_mod: do not set module parameter * Add: 0081-95dasd_mod-do-not-set-module-parameters-if-dasd_cio_.patch - 00warpclock: Check for /sbin/hwclock (bnc#884513) * Add: 0082-00warpclock-check-for-sbin-hwclock.patch - 95zfcp_rules: Fixup rd.zfcp parsing * Add: 0083-95zfcp_rules-Fixup-rd.zfcp-parsing.patch - 95rootfs_block: terminate commandline parameter * Add: 0084-95rootfs-block-Correctly-terminate-commandline-param.patch - 95zfcp_rules: Print out rd.zfcp command-line * Add: 0085-95zfcp_rules-print-out-rd.zfcp-commandline-parameter.patch - 95zfcp_rules: Auto-generate ipl device rule * Add: 0086-95zfcp_rules-Auto-generate-udev-rule-for-ipl-device.patch - 95dasd_rules: Auto-generate ipl device rule * Add: 0087-95dasd_rules-Auto-generate-udev-rule-for-ipl-device.patch OBS-URL: https://build.opensuse.org/request/show/238799 OBS-URL: https://build.opensuse.org/package/show/Base:System/dracut?expand=0&rev=165 --- 0079-95dasd_rules-fixup-rd.dasd-parsing.patch | 71 +++++++++++++++++ ..._rules-print-out-rd.dasd-commandline.patch | 74 ++++++++++++++++++ ...t-set-module-parameters-if-dasd_cio_.patch | 30 ++++++++ 0082-00warpclock-check-for-sbin-hwclock.patch | 32 ++++++++ 0083-95zfcp_rules-Fixup-rd.zfcp-parsing.patch | 60 +++++++++++++++ ...orrectly-terminate-commandline-param.patch | 61 +++++++++++++++ ...nt-out-rd.zfcp-commandline-parameter.patch | 76 +++++++++++++++++++ ...to-generate-udev-rule-for-ipl-device.patch | 59 ++++++++++++++ ...to-generate-udev-rule-for-ipl-device.patch | 36 +++++++++ dracut.changes | 22 ++++++ dracut.spec | 18 +++++ 11 files changed, 539 insertions(+) create mode 100644 0079-95dasd_rules-fixup-rd.dasd-parsing.patch create mode 100644 0080-95dasd_rules-print-out-rd.dasd-commandline.patch create mode 100644 0081-95dasd_mod-do-not-set-module-parameters-if-dasd_cio_.patch create mode 100644 0082-00warpclock-check-for-sbin-hwclock.patch create mode 100644 0083-95zfcp_rules-Fixup-rd.zfcp-parsing.patch create mode 100644 0084-95rootfs-block-Correctly-terminate-commandline-param.patch create mode 100644 0085-95zfcp_rules-print-out-rd.zfcp-commandline-parameter.patch create mode 100644 0086-95zfcp_rules-Auto-generate-udev-rule-for-ipl-device.patch create mode 100644 0087-95dasd_rules-Auto-generate-udev-rule-for-ipl-device.patch diff --git a/0079-95dasd_rules-fixup-rd.dasd-parsing.patch b/0079-95dasd_rules-fixup-rd.dasd-parsing.patch new file mode 100644 index 0000000..55f696d --- /dev/null +++ b/0079-95dasd_rules-fixup-rd.dasd-parsing.patch @@ -0,0 +1,71 @@ +From b302dd2a53864bdd4ff271275fa244f654cb92ca Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Thu, 26 Jun 2014 10:49:03 +0200 +Subject: 95dasd_rules: fixup rd.dasd parsing + +There were some errors when rd.dasd parsing, resulting in the +device never to be activated. And we should check for +cio_ignore even if a udev rules has been found. + +Signed-off-by: Hannes Reinecke +--- + modules.d/95dasd_rules/parse-dasd.sh | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +diff --git a/modules.d/95dasd_rules/parse-dasd.sh b/modules.d/95dasd_rules/parse-dasd.sh +index 02b4aea..43ca87a 100755 +--- a/modules.d/95dasd_rules/parse-dasd.sh ++++ b/modules.d/95dasd_rules/parse-dasd.sh +@@ -31,6 +31,10 @@ create_udev_rule() { + esac + [ -z "${_drv}" ] && return 0 + ++ if [ -x /sbin/cio_ignore ] && cio_ignore -i $ccw > /dev/null ; then ++ cio_ignore -r $ccw ++ fi ++ + [ -e ${_rule} ] && return 0 + + cat > $_rule < /dev/null ; then +- cio_ignore -r $ccw +- fi + } + + for dasd_arg in $(getargs root=) $(getargs resume=); do +@@ -48,7 +49,7 @@ for dasd_arg in $(getargs root=) $(getargs resume=); do + case $dasd_arg in + /dev/disk/by-path/ccw-*) + ccw_arg=${dasd_arg##*/} +- break; ++ ;; + esac + if [ -n "$ccw_arg" ] ; then + OLDIFS="$IFS" +@@ -79,8 +80,8 @@ for dasd_arg in $(getargs rd.dasd=); do + end=${1#0.0.} + shift + IFS="$OLDIFS" +- for dev in $(seq $(( 10#$start )) $(( 10#$end )) ) ; do +- create_udev_rule $(printf "0.0.%04d" "$dev") ++ for dev in $(seq $(( 16#$start )) $(( 16#$end )) ) ; do ++ create_udev_rule $(printf "0.0.%04x" "$dev") + done + ;; + *) +@@ -89,7 +90,7 @@ for dasd_arg in $(getargs rd.dasd=); do + ro=1 + fi + dev=${dev#0.0.} +- create_udev_rule $(printf "0.0.%04d" $(( 10#$dev )) ) ++ create_udev_rule $(printf "0.0.%04x" $(( 16#$dev )) ) + shift + ;; + esac +-- +1.8.4.5 + diff --git a/0080-95dasd_rules-print-out-rd.dasd-commandline.patch b/0080-95dasd_rules-print-out-rd.dasd-commandline.patch new file mode 100644 index 0000000..9bd67f6 --- /dev/null +++ b/0080-95dasd_rules-print-out-rd.dasd-commandline.patch @@ -0,0 +1,74 @@ +From 3e2e526a74cdad48d40a1ec58dac9f709d8fef0e Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Thu, 26 Jun 2014 10:50:43 +0200 +Subject: 95dasd_rules: print out 'rd.dasd' commandline + +When a DASD is found to be required for the rootfs we should +be printing out a 'rd.dasd' commandline parameter. This not +only enables us to correctly enable the device with cio_ignore, +we can also inspect the resulting initrd to figure out which +devices are required to mount the rootfs. + +Signed-off-by: Hannes Reinecke +--- + modules.d/95dasd_rules/module-setup.sh | 33 +++++++++++++++++++++++++++++++++ + 1 file changed, 33 insertions(+) + +diff --git a/modules.d/95dasd_rules/module-setup.sh b/modules.d/95dasd_rules/module-setup.sh +index 451fc25..e4736a2 100755 +--- a/modules.d/95dasd_rules/module-setup.sh ++++ b/modules.d/95dasd_rules/module-setup.sh +@@ -3,10 +3,39 @@ + # ex: ts=8 sw=4 sts=4 et filetype=sh + + # called by dracut ++cmdline() { ++ is_dasd() { ++ local _dev=$1 ++ local _devpath=$(cd -P /sys/dev/block/$_dev ; echo $PWD) ++ ++ [ "${_devpath#*/dasd}" == "$_devpath" ] && return 1 ++ _ccw="${_devpath%%/block/*}" ++ echo "rd.dasd=${_ccw##*/}" ++ return 0 ++ } ++ [[ $hostonly ]] || [[ $mount_needs ]] && { ++ for_each_host_dev_and_slaves is_dasd || return 255 ++ } ++} ++ ++# called by dracut + check() { + local _arch=$(uname -m) ++ local found=0 ++ local bdev + [ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1 + require_binaries /usr/lib/udev/collect || return 1 ++ ++ [[ $hostonly ]] || [[ $mount_needs ]] && { ++ for bdev in /sys/block/* ; do ++ case "${bdev##*/}" in ++ dasd*) ++ found=$(($found+1)); ++ break; ++ esac ++ done ++ [ $found -eq 0 ] && return 255 ++ } + return 0 + } + +@@ -19,6 +48,10 @@ depends() { + # called by dracut + install() { + inst_hook cmdline 30 "$moddir/parse-dasd.sh" ++ if [[ $hostonly_cmdline == "yes" ]] ; then ++ local _dasd=$(cmdline) ++ [[ $_dasd ]] && printf "%s\n" "$_dasd" >> "${initdir}/etc/cmdline.d/95dasd.conf" ++ fi + if [[ $hostonly ]] ; then + inst_rules_wildcard 51-dasd-*.rules + inst_rules_wildcard 41-s390x-dasd-*.rules +-- +1.8.4.5 + diff --git a/0081-95dasd_mod-do-not-set-module-parameters-if-dasd_cio_.patch b/0081-95dasd_mod-do-not-set-module-parameters-if-dasd_cio_.patch new file mode 100644 index 0000000..888bc5c --- /dev/null +++ b/0081-95dasd_mod-do-not-set-module-parameters-if-dasd_cio_.patch @@ -0,0 +1,30 @@ +From 95dc2742b9304029068a2b320e011bdfcc4087ea Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Thu, 26 Jun 2014 10:53:01 +0200 +Subject: 95dasd_mod: do not set module parameters if dasd_cio_free is not + present + +We're now parsing the 'rd.dasd' parameter from 95dasd_rules, so +setting the 'dasd_mod' module parameter should be dropped here. + +Signed-off-by: Hannes Reinecke +--- + modules.d/95dasd_mod/parse-dasd-mod.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules.d/95dasd_mod/parse-dasd-mod.sh b/modules.d/95dasd_mod/parse-dasd-mod.sh +index 0236d12..0b8adef 100755 +--- a/modules.d/95dasd_mod/parse-dasd-mod.sh ++++ b/modules.d/95dasd_mod/parse-dasd-mod.sh +@@ -9,7 +9,7 @@ done + + mod_args="${mod_args#*,}" + +-if [ -n "$mod_args" ]; then ++if [ -x /sbin/dasd_cio_free -a -n "$mod_args" ]; then + [ -d /etc/modprobe.d ] || mkdir -m 0755 -p /etc/modprobe.d + echo "options dasd_mod dasd=$mod_args" >> /etc/modprobe.d/dasd_mod.conf + fi +-- +1.8.4.5 + diff --git a/0082-00warpclock-check-for-sbin-hwclock.patch b/0082-00warpclock-check-for-sbin-hwclock.patch new file mode 100644 index 0000000..cdc2a4e --- /dev/null +++ b/0082-00warpclock-check-for-sbin-hwclock.patch @@ -0,0 +1,32 @@ +From 354e32e863a19d3539c3bf1b6affc98630b0003d Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Thu, 26 Jun 2014 10:44:42 +0200 +Subject: 00warpclock: check for /sbin/hwclock + +We need to check if /sbin/hwclock exists to avoid error messages +when running dracut. + +References: bnc#884513 + +Signed-off-by: Hannes Reinecke +--- + modules.d/00warpclock/module-setup.sh | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/modules.d/00warpclock/module-setup.sh b/modules.d/00warpclock/module-setup.sh +index 4d18795..5aec4eb 100755 +--- a/modules.d/00warpclock/module-setup.sh ++++ b/modules.d/00warpclock/module-setup.sh +@@ -4,7 +4,8 @@ + + # called by dracut + check() { +- [ -e /etc/localtime -a -e /etc/adjtime ] ++ [ -e /etc/localtime -a -e /etc/adjtime ] || return 1 ++ require_binaries /sbin/hwclock || return 1 + } + + # called by dracut +-- +1.8.4.5 + diff --git a/0083-95zfcp_rules-Fixup-rd.zfcp-parsing.patch b/0083-95zfcp_rules-Fixup-rd.zfcp-parsing.patch new file mode 100644 index 0000000..6548896 --- /dev/null +++ b/0083-95zfcp_rules-Fixup-rd.zfcp-parsing.patch @@ -0,0 +1,60 @@ +From 90b21dafd469ce4a8ac56944ce825f90c0782b16 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Thu, 26 Jun 2014 11:52:29 +0200 +Subject: 95zfcp_rules: Fixup rd.zfcp parsing + +There were some errors when parsing rd.zfcp, causing the device +never to be activated. + +Signed-off-by: Hannes Reinecke +--- + modules.d/95zfcp_rules/parse-zfcp.sh | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +diff --git a/modules.d/95zfcp_rules/parse-zfcp.sh b/modules.d/95zfcp_rules/parse-zfcp.sh +index 56152da..bb5cd3a 100755 +--- a/modules.d/95zfcp_rules/parse-zfcp.sh ++++ b/modules.d/95zfcp_rules/parse-zfcp.sh +@@ -7,9 +7,7 @@ create_udev_rule() { + local wwpn=$2 + local lun=$3 + local _rule=/etc/udev/rules.d/51-zfcp-${ccw}.rules +- + local _cu_type _dev_type +- local _rule=/etc/udev/rules.d/51-zfcp-${ccw}.rules + + if [ -e /sys/bus/ccw/devices/${ccw} ] ; then + read _cu_type < /sys/bus/ccw/devices/${ccw}/cutype +@@ -22,6 +20,10 @@ create_udev_rule() { + return 0; + fi + ++ if [ -x /sbin/cio_ignore ] && cio_ignore -i $ccw > /dev/null ; then ++ cio_ignore -r $ccw ++ fi ++ + [ -e ${_rule} ] && return 0 + + if [ ! -f "$_rule" ] ; then +@@ -37,9 +39,6 @@ EOF + ACTION=="add", KERNEL=="rport-*", ATTR{port_name}=="$wwpn", SUBSYSTEMS=="ccw", KERNELS=="$ccw", ATTR{[ccw/$ccw]$wwpn/unit_add}="$lun" + EOF + fi +- if [ -x /sbin/cio_ignore ] && ! cio_ignore -i $ccw > /dev/null ; then +- cio_ignore -r $ccw +- fi + } + + for zfcp_arg in $(getargs rd.zfcp); do +@@ -55,7 +54,7 @@ for zfcp_arg in $(getargs root=) $(getargs resume=); do + case $zfcp_arg in + /dev/disk/by-path/ccw-*) + ccw_arg=${zfcp_arg##*/} +- break; ++ ;; + esac + if [ -n "$ccw_arg" ] ; then + OLDIFS="$IFS" +-- +1.8.4.5 + diff --git a/0084-95rootfs-block-Correctly-terminate-commandline-param.patch b/0084-95rootfs-block-Correctly-terminate-commandline-param.patch new file mode 100644 index 0000000..434a9c1 --- /dev/null +++ b/0084-95rootfs-block-Correctly-terminate-commandline-param.patch @@ -0,0 +1,61 @@ +From 21e4cbee5d852108880cedc9edc619cdd9b296a5 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Thu, 26 Jun 2014 13:41:56 +0200 +Subject: 95rootfs-block: Correctly terminate commandline parameter + +95rootfs-block would not terminate the commandline parameter with +a space or newline, instead it'll rely on the main routine from +dracut.sh to do this. +Which will cause unexpected problems for any modules called +after this. + +So terminate the commandline parameters correctly here and remove +the newline from dracut.sh. + +Signed-off-by: Hannes Reinecke +--- + dracut.sh | 1 - + modules.d/95rootfs-block/module-setup.sh | 8 ++++---- + 2 files changed, 4 insertions(+), 5 deletions(-) + +diff --git a/dracut.sh b/dracut.sh +index a58e134..40006e7 100755 +--- a/dracut.sh ++++ b/dracut.sh +@@ -1166,7 +1166,6 @@ if [[ $print_cmdline ]]; then + module_cmdline "$_d_mod" + done + unset moddir +- printf "\n" + exit 0 + fi + +diff --git a/modules.d/95rootfs-block/module-setup.sh b/modules.d/95rootfs-block/module-setup.sh +index b868d0b..a620786 100755 +--- a/modules.d/95rootfs-block/module-setup.sh ++++ b/modules.d/95rootfs-block/module-setup.sh +@@ -24,7 +24,7 @@ cmdline_journal() { + fi + + if [ -n "$journaldev" ]; then +- printf " root.journaldev=%s" "$journaldev" ++ echo "root.journaldev=${journaldev}" + fi + done + fi +@@ -34,9 +34,9 @@ cmdline_journal() { + cmdline_rootfs() { + local dev=/dev/block/$(find_root_block_device) + if [ -e $dev ]; then +- printf " root=%s" "$(shorten_persistent_dev "$(get_persistent_dev "$dev")")" +- printf " rootflags=%s" "$(find_mp_fsopts /)" +- printf " rootfstype=%s" "$(find_mp_fstype /)" ++ printf "root=%s" "$(shorten_persistent_dev "$(get_persistent_dev "$dev")")" ++ printf "rootflags=%s" "$(find_mp_fsopts /)" ++ printf "rootfstype=%s\n" "$(find_mp_fstype /)" + fi + } + +-- +1.8.4.5 + diff --git a/0085-95zfcp_rules-print-out-rd.zfcp-commandline-parameter.patch b/0085-95zfcp_rules-print-out-rd.zfcp-commandline-parameter.patch new file mode 100644 index 0000000..d8be8f2 --- /dev/null +++ b/0085-95zfcp_rules-print-out-rd.zfcp-commandline-parameter.patch @@ -0,0 +1,76 @@ +From 3d918eb5be673f243dc75b358a35e1ed307f0ea5 Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Thu, 26 Jun 2014 13:44:05 +0200 +Subject: 95zfcp_rules: print out rd.zfcp commandline parameter + +When called with '--hostonly-cmdline' the module should print +out the configuration. + +Signed-off-by: Hannes Reinecke +--- + modules.d/95zfcp_rules/module-setup.sh | 39 +++++++++++++++++++++++++++++++++- + 1 file changed, 38 insertions(+), 1 deletion(-) + +diff --git a/modules.d/95zfcp_rules/module-setup.sh b/modules.d/95zfcp_rules/module-setup.sh +index 849645c..3f80754 100755 +--- a/modules.d/95zfcp_rules/module-setup.sh ++++ b/modules.d/95zfcp_rules/module-setup.sh +@@ -3,10 +3,40 @@ + # ex: ts=8 sw=4 sts=4 et filetype=sh + + # called by dracut ++cmdline() { ++ is_zfcp() { ++ local _dev=$1 ++ local _devpath=$(cd -P /sys/dev/block/$_dev ; echo $PWD) ++ local _sdev _lun _wwpn _ccw ++ ++ [ "${_devpath#*/sd}" == "$_devpath" ] && return 1 ++ _sdev="${_devpath%%/block/*}" ++ [ -e ${_sdev}/fcp_lun ] || return 1 ++ _lun=$(cat ${_sdev}/fcp_lun) ++ _wwpn=$(cat ${_sdev}/wwpn) ++ _ccw=$(cat ${_sdev}/hba_id) ++ echo "rd.zfcp=${_ccw},${_wwpn},${_lun}" ++ return 1 ++ } ++ [[ $hostonly ]] || [[ $mount_needs ]] && { ++ for_each_host_dev_and_slaves is_zfcp ++ } ++} ++ ++# called by dracut + check() { + local _arch=$(uname -m) ++ local _ccw + [ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1 +- require_binaries zfcp_disk_configure /usr/lib/udev/collect || return 1 ++ require_binaries /usr/lib/udev/collect || return 1 ++ ++ [[ $hostonly ]] || [[ $mount_needs ]] && { ++ for _ccw in /sys/bus/ccw/devices/*/host* ; do ++ [ -d "$_ccw" ] || continue ++ found=$(($found+1)); ++ done ++ [ $found -eq 0 ] && return 255 ++ } + return 0 + } + +@@ -19,6 +49,13 @@ depends() { + install() { + inst_multiple /usr/lib/udev/collect + inst_hook cmdline 30 "$moddir/parse-zfcp.sh" ++ if [[ $hostonly_cmdline == "yes" ]] ; then ++ local _zfcp ++ ++ for _zfcp in $(cmdline) ; do ++ printf "%s\n" "$zfcp" >> "${initdir}/etc/cmdline.d/94zfcp.conf" ++ done ++ fi + if [[ $hostonly ]] ; then + inst_rules_wildcard 51-zfcp-*.rules + inst_rules_wildcard 41-s390x-zfcp-*.rules +-- +1.8.4.5 + diff --git a/0086-95zfcp_rules-Auto-generate-udev-rule-for-ipl-device.patch b/0086-95zfcp_rules-Auto-generate-udev-rule-for-ipl-device.patch new file mode 100644 index 0000000..f8a04f8 --- /dev/null +++ b/0086-95zfcp_rules-Auto-generate-udev-rule-for-ipl-device.patch @@ -0,0 +1,59 @@ +From 754bda4bcf9698837802b31bd74061702edf6c8c Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Thu, 26 Jun 2014 14:01:33 +0200 +Subject: 95zfcp_rules: Auto-generate udev rule for ipl device + +We should auto-generate an udev rule for the ipl device; it'll be +enabled anyway. + +Signed-off-by: Hannes Reinecke +--- + modules.d/95zfcp_rules/parse-zfcp.sh | 18 ++++++++++++++++-- + 1 file changed, 16 insertions(+), 2 deletions(-) + +diff --git a/modules.d/95zfcp_rules/parse-zfcp.sh b/modules.d/95zfcp_rules/parse-zfcp.sh +index bb5cd3a..05c1ed0 100755 +--- a/modules.d/95zfcp_rules/parse-zfcp.sh ++++ b/modules.d/95zfcp_rules/parse-zfcp.sh +@@ -41,6 +41,17 @@ EOF + fi + } + ++if [[ -f /sys/firmware/ipl/ipl_type && ++ $( +Date: Thu, 26 Jun 2014 14:04:19 +0200 +Subject: 95dasd_rules: Auto-generate udev rule for ipl device + +We should be generating a udev rule for the ipl device; it'll +be enabled anyway. + +Signed-off-by: Hannes Reinecke +--- + modules.d/95dasd_rules/parse-dasd.sh | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/modules.d/95dasd_rules/parse-dasd.sh b/modules.d/95dasd_rules/parse-dasd.sh +index 43ca87a..7b6a3d2 100755 +--- a/modules.d/95dasd_rules/parse-dasd.sh ++++ b/modules.d/95dasd_rules/parse-dasd.sh +@@ -44,6 +44,15 @@ ACTION=="add", ENV{COLLECT_$ccw}=="0", ATTR{[ccw/$ccw]online}="1" + EOF + } + ++if [[ -f /sys/firmware/ipl/ipl_type && ++ $(