commit:     f559150dd16fc42e5bf4be4d24101e947ee21d60
Author:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
AuthorDate: Mon Jul 15 22:27:16 2019 +0000
Commit:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
CommitDate: Mon Jul 15 22:27:16 2019 +0000
URL:        https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=f559150d

linuxrc: Really prompt for new root block device when got_good_root is 0

Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org>

 defaults/linuxrc | 37 ++++++++++++++++++-------------------
 1 file changed, 18 insertions(+), 19 deletions(-)

diff --git a/defaults/linuxrc b/defaults/linuxrc
index f1cbec1..518efc6 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -695,14 +695,13 @@ do
                        fi
                done  # End of sleep loop waiting on root
 
-               if [ -z "${REAL_ROOT}" ]
+               if [ ${ROOTDELAY_100MSEC} -le 0 ]
                then
-                       # No REAL_ROOT determined/specified. Prompt user for 
root block device.
-                       prompt_user "REAL_ROOT" "root block device"
-                       got_good_root=0
+                       echo
+               fi
 
                # Check for a block device or /dev/nfs or zfs encryption
-               elif [ -b "${REAL_ROOT}" ] || [ "${REAL_ROOT}" = "/dev/nfs" ] 
|| [ "${ROOTFSTYPE}" = "zfs" ]
+               if [ -n "${REAL_ROOT}" ] && [ -b "${REAL_ROOT}" ] || [ 
"${REAL_ROOT}" = "/dev/nfs" ] || [ "${ROOTFSTYPE}" = "zfs" ]
                then
                        if [ "${ROOTFSTYPE}" = "zfs" ]
                        then
@@ -718,37 +717,33 @@ do
                                                zfs load-key 
"${ZFS_ENCRYPTIONROOT}"
                                                retval=$?
                                                # if the key loaded fine, 
confirm got_good_root to exit second while loop
-                                               if [ ${retval} -eq 0 ]
+                                               if [ ${retval} -ne 0 ]
                                                then
-                                                       got_good_root=1
-                                               else
                                                        bad_msg "${ROOT_DEV} is 
encrypted and not mountable without key"
-                                                       prompt_user "REAL_ROOT" 
"root block device"
                                                        got_good_root=0
+                                                       break
                                                fi
                                        fi
                                fi
                        else
                                got_good_root=1
                        fi
-               else
-                       bad_msg "Block device ${REAL_ROOT} is not a valid root 
device ..."
-                       REAL_ROOT=""
-                       got_good_root=0
                fi
-       done
 
+               break
+       done
 
-       if [ "${CDROOT}" = 1 -a "${got_good_root}" = '1' -a "${REAL_ROOT}" != 
"/dev/nfs" ]
+       if [ "${got_good_root}" = '1' -a "${CDROOT}" = 1 -a "${REAL_ROOT}" != 
"/dev/nfs" ]
        then
                # CD already mounted; no further checks necessary
                break
-       elif [ "${LOOPTYPE}" = 'sgimips' ]
+       elif [ "${got_good_root}" = '1' -a "${LOOPTYPE}" = 'sgimips' ]
        then
                # sgimips mounts the livecd root partition directly
                # there is no isofs filesystem to worry about
                break
-       else
+       elif [ "${got_good_root}" = '1' ]
+       then
                good_msg "Mounting ${REAL_ROOT} as root ..."
 
                if [ "${ROOTFSTYPE}" = 'zfs' ]
@@ -797,14 +792,18 @@ do
                        else
                                bad_msg "The filesystem mounted at ${REAL_ROOT} 
does not appear to be a valid /, try again"
                                got_good_root=0
-                               REAL_ROOT=''
                        fi
                else
                        bad_msg "Could not mount specified ROOT, try again"
                        got_good_root=0
-                       REAL_ROOT=''
                fi
        fi
+
+       if [ "${got_good_root}" = '0' ]
+       then
+               bad_msg "Block device ${REAL_ROOT} is not a valid root device 
..."
+               prompt_user "REAL_ROOT" "root block device"
+       fi
 done
 # End determine root device
 

Reply via email to