From: Arjan van de Ven <arjan@infradead.org>
To: Arjan van de Ven <arjan@infradead.org>
Cc: linux-kernel@vger.kernel.org, mingo@elte.hu,
Simon Arlott <simon@fire.lp0.eu>,
Daniel Walker <dwalker@mvista.com>,
Rene Herman <rene.herman@keyaccess.nl>
Subject: [patch 2/4] fastboot: retry mounting the root fs if we can't find init
Date: Sun, 20 Jul 2008 15:13:04 -0700 [thread overview]
Message-ID: <20080720151304.59b06786@infradead.org> (raw)
In-Reply-To: <20080720151140.4aa7c682@infradead.org>
From: Arjan van de Ven <arjan@linux.intel.com>
Date: Sun, 20 Jul 2008 13:01:28 -0700
Subject: [PATCH] fastboot: retry mounting the root fs if we can't find init
currently we wait until all device init is done before trying to mount
the root fs, and to consequently execute init.
In preparation for relaxing the first delay, this patch adds a retry
attempt in case /sbin/init is not found. Before retrying, the code
will wait for all device init to complete.
While this patch by itself doesn't gain boot time yet (it needs follow on
patches), the alternative already is to panic()...
Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
---
init/main.c | 19 +++++++++++++++++++
1 files changed, 19 insertions(+), 0 deletions(-)
diff --git a/init/main.c b/init/main.c
index 3575b84..73785a4 100644
--- a/init/main.c
+++ b/init/main.c
@@ -853,6 +853,7 @@ static void run_init_process(char *init_filename)
*/
static int noinline init_post(void)
{
+ int retry_count = 1;
free_initmem();
unlock_kernel();
mark_rodata_ro();
@@ -873,6 +874,7 @@ static int noinline init_post(void)
ramdisk_execute_command);
}
+retry:
/*
* We try each of these until one succeeds.
*
@@ -885,6 +887,23 @@ static int noinline init_post(void)
"defaults...\n", execute_command);
}
run_init_process("/sbin/init");
+
+ if (retry_count > 0) {
+ retry_count--;
+ /*
+ * We haven't found init yet... potentially because the device
+ * is still being probed. We need to
+ * - flush keventd and friends
+ * - wait for the known devices to complete their probing
+ * - try to mount the root fs again
+ */
+ flush_scheduled_work();
+ while (driver_probe_done() != 0)
+ msleep(100);
+ prepare_namespace();
+ goto retry;
+ }
+
run_init_process("/etc/init");
run_init_process("/bin/init");
run_init_process("/bin/sh");
--
1.5.5.1
next prev parent reply other threads:[~2008-07-20 22:15 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20080720151140.4aa7c682@infradead.org>
2008-07-20 22:12 ` [patch 1/4] fastboot: make fastboot a config option Arjan van de Ven
2008-07-30 15:23 ` Randy Dunlap
2008-07-31 10:53 ` Ingo Molnar
2008-07-20 22:13 ` Arjan van de Ven [this message]
2008-07-21 1:35 ` [patch 2/4] fastboot: retry mounting the root fs if we can't find init Daniel Walker
2008-07-20 22:13 ` [patch 3/4] fastboot: make the raid autodetect code wait for all devices to init Arjan van de Ven
2008-07-20 23:06 ` Neil Brown
2008-07-20 23:12 ` david
2008-07-20 23:19 ` Arjan van de Ven
2008-07-20 23:31 ` Arjan van de Ven
2008-07-21 4:30 ` Neil Brown
2008-07-20 21:33 ` Arjan van de Ven
2008-07-20 22:14 ` [patch 4/4] fastboot: remove "wait for all devices before mounting root" delay Arjan van de Ven
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080720151304.59b06786@infradead.org \
--to=arjan@infradead.org \
--cc=dwalker@mvista.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rene.herman@keyaccess.nl \
--cc=simon@fire.lp0.eu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox