diff --git a/modules.d/95dasd_mod/parse-dasd-mod.sh b/modules.d/95dasd_mod/parse-dasd-mod.sh index d7e8664f..7b197d1b 100755 --- a/modules.d/95dasd_mod/parse-dasd-mod.sh +++ b/modules.d/95dasd_mod/parse-dasd-mod.sh @@ -2,16 +2,48 @@ # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- # ex: ts=8 sw=4 sts=4 et filetype=sh mod_args="" -for dasd_arg in $(getargs rd.dasd= rd_DASD= DASD=); do - if [ -z $mod_args ]; then - mod_args="$dasd_arg" + +convert_dasd_param() { + local bus_id params + params="" + bus_id=$1; shift + while [ $# -gt 0 ]; do + case "$1" in + use_diag\=1) + params="$params,diag" + ;; + readonly\=1) + params="$params,ro" + ;; + erplog\=1) + params="$params,erplog" + ;; + failfast\=1) + params="$params,failfast" + ;; + esac + shift + done + params="${params#*,}" + if [ -n "$params" ]; then + echo "$bus_id($params)" else - # We've already got some thing in mod_args, add to it - mod_args="$mod_args,$dasd_arg" + echo "$bus_id" fi +} + +for dasd_arg in $(getargs rd.dasd= rd_DASD= DASD=); do + OLD_IFS=$IFS + IFS="," + set -- $dasd_arg + IFS=$OLD_IFS + dasd_arg=$(convert_dasd_param "$@") + mod_args="$mod_args,$dasd_arg" done -if [ ! -z $mod_args ]; then +mod_args="${mod_args#*,}" + +if [ -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