Re: waiting 10s before mounting root filesystem?

From: William Park
Date: Thu Dec 30 2004 - 19:23:43 EST


On Thu, Dec 30, 2004 at 01:25:32PM -0200, Marcelo Tosatti wrote:
> On Tue, Dec 28, 2004 at 07:59:22PM -0500, William Park wrote:
> > On Mon, Dec 27, 2004 at 10:23:34PM +0100, Andreas Unterkircher wrote:
> > > [1] http://www.xenotime.net/linux/usb/usbboot-2422.patch
> >
> > Thanks Andreas. I can now boot from my el-cheapo USB key drive
> > (256MB SanDisk Cruzer Mini). Since mine takes about 5sec to show
> > up, I decided to wait 5sec instead of 1sec. Here is diff for
> > 2.6.10:
> >
> > --- ./init/do_mounts.c--orig 2004-12-27 17:36:35.000000000 -0500
> > +++ ./init/do_mounts.c 2004-12-28 17:27:26.000000000 -0500
> > @@ -301,7 +301,14 @@ retry:
> > root_device_name, b);
> > printk("Please append a correct \"root=\" boot option\n");
> >
> > +#if 0 /* original code */
> > panic("VFS: Unable to mount root fs on %s", b);
> > +#else
> > + printk ("Waiting 5 seconds to try again...\n");
> > + set_current_state(TASK_INTERRUPTIBLE);
> > + schedule_timeout(5 * HZ);
> > + goto retry;
> > +#endif
> > }
> > panic("VFS: Unable to mount root fs on %s", __bdevname(ROOT_DEV, b));
> > out:
>
> William,
>
> Solar version which is now merged in v2.4 looks better (5s sleep is
> too long and only one try) IMO.
>
> It sleeps 1s each time, 10 times. More reliable and faster.
>
> http://linux.bkbits.net:8080/linux-2.4/patch@xxxxxxxxxxx?nav=index.html|ChangeSet@-3w|cset@xxxxxxxxxxx

Hi Marcelo,

1. Actually, my patch above loops every 5s to reduce screen clutter,
whereas the original 2.4 patch (cited by Andreas Unterkircher) loops
every 1s. Both loops forever.

But, if a limit of 10 tries is what you want, then here is a patch
for 2.6.10:
====================

--- ./init/do_mounts.c--orig 2004-12-27 17:36:35.000000000 -0500
+++ ./init/do_mounts.c 2004-12-30 18:57:46.000000000 -0500
@@ -278,6 +278,7 @@
char *fs_names = __getname();
char *p;
char b[BDEVNAME_SIZE];
+ int tryagain = 10;

get_fs_names(fs_names);
retry:
@@ -297,11 +298,16 @@
* and bad superblock on root device.
*/
__bdevname(ROOT_DEV, b);
+ if (--tryagain) {
+ printk ("VFS: Waiting %dsec for root device...\n", tryagain);
+ set_current_state (TASK_INTERRUPTIBLE);
+ schedule_timeout (HZ);
+ goto retry;
+ }
printk("VFS: Cannot open root device \"%s\" or %s\n",
root_device_name, b);
printk("Please append a correct \"root=\" boot option\n");
-
- panic("VFS: Unable to mount root fs on %s", b);
+ break;
}
panic("VFS: Unable to mount root fs on %s", __bdevname(ROOT_DEV, b));
out:

====================

The only difference are
- using 'tryagain' instead of 'tries' as counter
- printing countdown of seconds like
VFS: Waiting 9sec for root device...
VFS: Waiting 8sec for root device...
...
VFS: Waiting 1sec for root device...
before printing the final error.


2. I sincerely hope that this patch get included in the main kernel.
USB boot is very important feature, and will become the standard way
of booting Linux thin-client as well as other Linux system, embedded
or not. It will make Netboot, Etherboot, PXE boot, CF-to-IDE
adapter, and initrd all obsolete.

--
William Park <opengeometry@xxxxxxxx>
Open Geometry Consulting, Toronto, Canada
Linux solution for data processing.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/