Fixed init so it won't hang on reboot...
authorEric Andersen <andersen@codepoet.org>
Fri, 5 Nov 1999 04:23:05 +0000 (04:23 -0000)
committerEric Andersen <andersen@codepoet.org>
Fri, 5 Nov 1999 04:23:05 +0000 (04:23 -0000)
init.c
init/init.c

diff --git a/init.c b/init.c
index 87746ef865f96ea09ed317577a6bb9df8d7687f1..bf97fe5d6df2b300a52f0ac35c6d9e34c3411c77 100644 (file)
--- a/init.c
+++ b/init.c
@@ -56,7 +56,7 @@
 static char *console = VT_CONSOLE;
 static char *second_console = VT_SECONDARY;
 static char *log = VT_LOG;
-
+static int kernel_version = 0;
 
 
 /* try to open up the specified device */
@@ -350,9 +350,9 @@ static void shutdown_system(void)
     waitfor(run( swap_off_cmd, console, FALSE));
     waitfor(run( umount_cmd, console, FALSE));
     sync();
-    message(CONSOLE, "Skipping bdflush\r\n");
-    if (get_kernel_revision() <= 2 * 65536 + 2 * 256 + 11) {
+    if (kernel_version > 0 && kernel_version <= 2 * 65536 + 2 * 256 + 11) {
        /* bdflush, kupdate not needed for kernels >2.2.11 */
+       message(CONSOLE, "Flushing buffers.\r\n");
        bdflush(1, 0);
        sync();
     }
@@ -445,9 +445,10 @@ extern int init_main(int argc, char **argv)
 
     
     /* Mount /proc */
-    if (mount ("proc", "/proc", "proc", 0, 0) == 0)
+    if (mount ("proc", "/proc", "proc", 0, 0) == 0) {
        message(CONSOLE|LOG, "Mounting /proc: done.\n");
-    else
+       kernel_version = get_kernel_revision();
+    } else
        message(CONSOLE|LOG, "Mounting /proc: failed!\n");
 
     /* Make sure there is enough memory to do something useful. */
index 87746ef865f96ea09ed317577a6bb9df8d7687f1..bf97fe5d6df2b300a52f0ac35c6d9e34c3411c77 100644 (file)
@@ -56,7 +56,7 @@
 static char *console = VT_CONSOLE;
 static char *second_console = VT_SECONDARY;
 static char *log = VT_LOG;
-
+static int kernel_version = 0;
 
 
 /* try to open up the specified device */
@@ -350,9 +350,9 @@ static void shutdown_system(void)
     waitfor(run( swap_off_cmd, console, FALSE));
     waitfor(run( umount_cmd, console, FALSE));
     sync();
-    message(CONSOLE, "Skipping bdflush\r\n");
-    if (get_kernel_revision() <= 2 * 65536 + 2 * 256 + 11) {
+    if (kernel_version > 0 && kernel_version <= 2 * 65536 + 2 * 256 + 11) {
        /* bdflush, kupdate not needed for kernels >2.2.11 */
+       message(CONSOLE, "Flushing buffers.\r\n");
        bdflush(1, 0);
        sync();
     }
@@ -445,9 +445,10 @@ extern int init_main(int argc, char **argv)
 
     
     /* Mount /proc */
-    if (mount ("proc", "/proc", "proc", 0, 0) == 0)
+    if (mount ("proc", "/proc", "proc", 0, 0) == 0) {
        message(CONSOLE|LOG, "Mounting /proc: done.\n");
-    else
+       kernel_version = get_kernel_revision();
+    } else
        message(CONSOLE|LOG, "Mounting /proc: failed!\n");
 
     /* Make sure there is enough memory to do something useful. */