diff options
-rw-r--r-- | loader/linuxrc.s390 | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/loader/linuxrc.s390 b/loader/linuxrc.s390 index a3ee66564..7fd3f4fa2 100644 --- a/loader/linuxrc.s390 +++ b/loader/linuxrc.s390 @@ -129,6 +129,25 @@ function sysecho () { [ -f "$file" ] && echo $* > $file } +function dasd_settle() { + local dasd=/sys/bus/ccw/devices/$1 + if [ ! -d "$dasd" ]; then + return 1 + fi + local i=1 + while [ $i -le 30 ] ; do + status="$(< /sys/bus/ccw/devices/$dasd/status 2>/dev/null)" + case $status in + online|unformatted) + return 0 ;; + *) + sleep 0.1 + i=$((i+1)) ;; + esac + done + return 1 +} + function startinetd() { echo @@ -190,6 +209,11 @@ function readcmsfile() # $1=dasdport $2=filename return 1 fi udevadm settle + if ! dasd_settle $dev ; then + echo $"Could not access DASD $dev in time" + return 1 + fi + udevadm settle if ! cmsfscat -d /dev/dasda -a $2 > /tmp/$2; then echo $"Could not read conf file $2 on CMS DASD $1." fi |