Blame 0050-Add-DASD-configuration-for-SuSE.patch

Harald Hoyer 4734ec
From bfa1db78cdcf6aaea09da560b578426fe663a05e Mon Sep 17 00:00:00 2001
Harald Hoyer 4734ec
From: Hannes Reinecke <hare@suse.de>
Harald Hoyer 4734ec
Date: Fri, 29 Nov 2013 13:13:47 +0100
Harald Hoyer 4734ec
Subject: [PATCH] Add DASD configuration for SuSE
Harald Hoyer 4734ec
Harald Hoyer 4734ec
On SuSE the DASD configuration is kept in udev rules, one rule
Harald Hoyer 4734ec
file per device. So add a new module for copying and creating
Harald Hoyer 4734ec
these rules during boot.
Harald Hoyer 4734ec
Harald Hoyer 4734ec
Signed-off-by: Hannes Reinecke <hare@suse.de>
Harald Hoyer 4734ec
---
Harald Hoyer 4734ec
 dracut-functions.sh                    | 28 +++++++++++++++++
Harald Hoyer 4734ec
 modules.d/95dasd_rules/module-setup.sh | 27 ++++++++++++++++
Harald Hoyer 4734ec
 modules.d/95dasd_rules/parse-dasd.sh   | 56 ++++++++++++++++++++++++++++++++++
Harald Hoyer 4734ec
 3 files changed, 111 insertions(+)
Harald Hoyer 4734ec
 create mode 100755 modules.d/95dasd_rules/module-setup.sh
Harald Hoyer 4734ec
 create mode 100755 modules.d/95dasd_rules/parse-dasd.sh
Harald Hoyer 4734ec
Harald Hoyer 4734ec
diff --git a/dracut-functions.sh b/dracut-functions.sh
Harald Hoyer 4734ec
index 04f4fea..7cfa097 100755
Harald Hoyer 4734ec
--- a/dracut-functions.sh
Harald Hoyer 4734ec
+++ b/dracut-functions.sh
Harald Hoyer 4734ec
@@ -899,6 +899,34 @@ inst_rules() {
Harald Hoyer 4734ec
     done
Harald Hoyer 4734ec
 }
Harald Hoyer 4734ec
 
Harald Hoyer 4734ec
+inst_rules_wildcard() {
Harald Hoyer 4734ec
+    local _target=/etc/udev/rules.d _rule _found
Harald Hoyer 4734ec
+
Harald Hoyer 4734ec
+    inst_dir "${udevdir}/rules.d"
Harald Hoyer 4734ec
+    inst_dir "$_target"
Harald Hoyer 4734ec
+    for _rule in ${udevdir}/rules.d/$1 ${dracutbasedir}/rules.d/$1 ; do
Harald Hoyer 4734ec
+        if [[ -e $_rule ]]; then
Harald Hoyer 4734ec
+            inst_rule_programs "$_rule"
Harald Hoyer 4734ec
+            inst_rule_group_owner "$_rule"
Harald Hoyer 4734ec
+            inst_rule_initqueue "$_rule"
Harald Hoyer 4734ec
+            inst_simple "$_rule"
Harald Hoyer 4734ec
+            _found=$_rule
Harald Hoyer 4734ec
+        fi
Harald Hoyer 4734ec
+    done
Harald Hoyer 4734ec
+    if [ -n ${hostonly} ] ; then
Harald Hoyer 4734ec
+        for _rule in ${_target}/$1 ; do
Harald Hoyer 4734ec
+            if [[ -f $_rule ]]; then
Harald Hoyer 4734ec
+                inst_rule_programs "$_rule"
Harald Hoyer 4734ec
+                inst_rule_group_owner "$_rule"
Harald Hoyer 4734ec
+                inst_rule_initqueue "$_rule"
Harald Hoyer 4734ec
+                inst_simple "$_rule"
Harald Hoyer 4734ec
+                _found=$_rule
Harald Hoyer 4734ec
+            fi
Harald Hoyer 4734ec
+        done
Harald Hoyer 4734ec
+    fi
Harald Hoyer 4734ec
+    [[ $_found ]] || dinfo "Skipping udev rule: $_rule"
Harald Hoyer 4734ec
+}
Harald Hoyer 4734ec
+
Harald Hoyer 4734ec
 prepare_udev_rules() {
Harald Hoyer 4734ec
     [ -z "$UDEVVERSION" ] && export UDEVVERSION=$(udevadm --version)
Harald Hoyer 4734ec
 
Harald Hoyer 4734ec
diff --git a/modules.d/95dasd_rules/module-setup.sh b/modules.d/95dasd_rules/module-setup.sh
Harald Hoyer 4734ec
new file mode 100755
Harald Hoyer 4734ec
index 0000000..d313171
Harald Hoyer 4734ec
--- /dev/null
Harald Hoyer 4734ec
+++ b/modules.d/95dasd_rules/module-setup.sh
Harald Hoyer 4734ec
@@ -0,0 +1,27 @@
Harald Hoyer 4734ec
+#!/bin/bash
Harald Hoyer 4734ec
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer 4734ec
+# ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 4734ec
+
Harald Hoyer 4734ec
+# called by dracut
Harald Hoyer 4734ec
+check() {
Harald Hoyer 4734ec
+    local _arch=$(uname -m)
Harald Hoyer 4734ec
+    [ -x /sbin/dasd_configure ] || return 1
Harald Hoyer 4734ec
+    [ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1
Harald Hoyer 4734ec
+    return 0
Harald Hoyer 4734ec
+}
Harald Hoyer 4734ec
+
Harald Hoyer 4734ec
+# called by dracut
Harald Hoyer 4734ec
+depends() {
Harald Hoyer 4734ec
+    echo 'dasd_mod'
Harald Hoyer 4734ec
+    return 0
Harald Hoyer 4734ec
+}
Harald Hoyer 4734ec
+
Harald Hoyer 4734ec
+# called by dracut
Harald Hoyer 4734ec
+install() {
Harald Hoyer 4734ec
+    inst_multiple /usr/lib/udev/collect
Harald Hoyer 4734ec
+    inst_hook cmdline 30 "$moddir/parse-dasd.sh"
Harald Hoyer 4734ec
+    if [[ $hostonly ]] ; then
Harald Hoyer 4734ec
+        inst_rules_wildcard 51-dasd-*.rules
Harald Hoyer 4734ec
+    fi
Harald Hoyer 4734ec
+    inst_rules 59-dasd.rules
Harald Hoyer 4734ec
+}
Harald Hoyer 4734ec
diff --git a/modules.d/95dasd_rules/parse-dasd.sh b/modules.d/95dasd_rules/parse-dasd.sh
Harald Hoyer 4734ec
new file mode 100755
Harald Hoyer 4734ec
index 0000000..9389c44
Harald Hoyer 4734ec
--- /dev/null
Harald Hoyer 4734ec
+++ b/modules.d/95dasd_rules/parse-dasd.sh
Harald Hoyer 4734ec
@@ -0,0 +1,56 @@
Harald Hoyer 4734ec
+#!/bin/sh
Harald Hoyer 4734ec
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
Harald Hoyer 4734ec
+# ex: ts=8 sw=4 sts=4 et filetype=sh
Harald Hoyer 4734ec
+
Harald Hoyer 4734ec
+create_udev_rule() {
Harald Hoyer 4734ec
+    local ccw=$1
Harald Hoyer 4734ec
+    local _drv _cu_type _dev_type
Harald Hoyer 4734ec
+    local _rule=/etc/udev/rules.d/51-dasd-${ccw}.rules
Harald Hoyer 4734ec
+
Harald Hoyer 4734ec
+    if [ -e /sys/bus/ccw/devices/${ccw} ] ; then
Harald Hoyer 4734ec
+        read _cu_type < /sys/bus/ccw/devices/${ccw}/cutype
Harald Hoyer 4734ec
+        read _dev_type < /sys/bus/ccw/devices/${ccw}/devtype
Harald Hoyer 4734ec
+    fi
Harald Hoyer 4734ec
+    case "$_cu_type" in
Harald Hoyer 4734ec
+    3990/*|2105/*|2107/*|1750/*|9343/*)
Harald Hoyer 4734ec
+            _drv=dasd-eckd
Harald Hoyer 4734ec
+            ;;
Harald Hoyer 4734ec
+    6310/*)
Harald Hoyer 4734ec
+            _drv=dasd-fba
Harald Hoyer 4734ec
+            ;;
Harald Hoyer 4734ec
+    3880/*)
Harald Hoyer 4734ec
+        case "$_dev_type" in
Harald Hoyer 4734ec
+            3380/*)
Harald Hoyer 4734ec
+                _drv=dasd_eckd
Harald Hoyer 4734ec
+                ;;
Harald Hoyer 4734ec
+            3370/*)
Harald Hoyer 4734ec
+                _drv=dasd-fba
Harald Hoyer 4734ec
+                ;;
Harald Hoyer 4734ec
+        esac
Harald Hoyer 4734ec
+        ;;
Harald Hoyer 4734ec
+    esac
Harald Hoyer 4734ec
+    [ -z "${_drv}" ] && return 0
Harald Hoyer 4734ec
+
Harald Hoyer 4734ec
+    [ -e ${_rule} ] && return 0
Harald Hoyer 4734ec
+
Harald Hoyer 4734ec
+    cat > $_rule <
Harald Hoyer 4734ec
+ACTION=="add", SUBSYSTEM=="ccw", KERNEL=="$ccw", IMPORT{program}="collect $ccw %k ${ccw} $_drv"
Harald Hoyer 4734ec
+ACTION=="add", SUBSYSTEM=="drivers", KERNEL=="$_drv", IMPORT{program}="collect $ccw %k ${ccw} $_drv"
Harald Hoyer 4734ec
+ACTION=="add", ENV{COLLECT_$ccw}=="0", ATTR{[ccw/$ccw]online}="1"
Harald Hoyer 4734ec
+EOF
Harald Hoyer 4734ec
+}
Harald Hoyer 4734ec
+
Harald Hoyer 4734ec
+for dasd_arg in $(getargs root=) $(getargs resume=); do
Harald Hoyer 4734ec
+    (
Harald Hoyer 4734ec
+        case $dasd_arg in
Harald Hoyer 4734ec
+            /dev/disk/by-path/ccw-*)
Harald Hoyer 4734ec
+                ccw_arg=${dasd_arg##*/}
Harald Hoyer 4734ec
+                break;
Harald Hoyer 4734ec
+        esac
Harald Hoyer 4734ec
+        if [ -n "$ccw_arg" ] ; then
Harald Hoyer 4734ec
+            IFS="-"
Harald Hoyer 4734ec
+            set -- $ccw_arg
Harald Hoyer 4734ec
+            create_udev_rule $2
Harald Hoyer 4734ec
+        fi
Harald Hoyer 4734ec
+    )
Harald Hoyer 4734ec
+done