[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[PATCH 4/5] Wait for all DASDs to be online after autodetection (#558881).

When a user boots with cio_ignore=all,!0.0.0009 on s390x, it tells the
kernel to only bring device 0.0.0009 online before booting.  Device
0.0.0009 is the 3270 console.  The idea behind cio_ignore is to prevent
long bootups when the kernel will see thousands of devices and have to
bring up each one and gather stats.  With cio_ignore, you get in to
Linux faster and then specifically enable the devices you want.

We support this in anaconda via linuxrc.s390.  Your CMS conf file can
specify the devices or device ranges to use during installation.  If you
don't specify that information, linuxrc.s390 prompts you.  If you don't
know what information to provide, you can just press Enter and the
entire system is scanned.

When a DASD scan happens and each one is brought online, make sure we
wait until the devices enter the 'active' or 'unformatted' states.  The
other states indicate we should continue waiting for the device to come
 loader/linuxrc.s390 |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/loader/linuxrc.s390 b/loader/linuxrc.s390
index 82a741c..47a769f 100644
--- a/loader/linuxrc.s390
+++ b/loader/linuxrc.s390
@@ -149,6 +149,16 @@ function dasd_settle() {
     return 1
+function dasd_settle_all() {
+    for dasdccw in $(cut -d '(' -f 1 /proc/dasd/devices) ; do
+        if ! dasd_settle $dasdccw ; then
+            echo $"Could not access DASD $dasdccw in time"
+            return 0
+        fi
+    done
+    return 1
 function startinetd()
@@ -2519,6 +2529,7 @@ function parse_dasd() {
     done < <(echo $DASD | sed 's/,/\n/g')
     if [ "$handle" = "yes" ]; then
         udevadm settle
+        dasd_settle_all || return 0
         echo $"Activated DASDs:"
         cat /proc/dasd/devices | sed -e 's/ at ([^)]*) is//' -e 's/ at/,/'
@@ -2713,6 +2724,7 @@ function final_check() {
             d) # show active DASDs with some useful details
+                dasd_settle_all || return 0
                 echo $"Activated DASDs:"
                 cat /proc/dasd/devices|sed -e 's/ at ([^)]*) is//' -e 's/ at/,/'

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]