Index: linux-2.6.10/init/do_mounts.c =================================================================== --- linux-2.6.10.orig/init/do_mounts.c Fri Dec 24 22:34:31 2004 +++ linux-2.6.10/init/do_mounts.c Sat Jan 1 17:43:42 2005 @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -278,6 +279,7 @@ char *fs_names = __getname(); char *p; char b[BDEVNAME_SIZE]; + int retries = 15; get_fs_names(fs_names); retry: @@ -296,12 +298,16 @@ * Allow the user to distinguish between failed sys_open * and bad superblock on root device. */ - __bdevname(ROOT_DEV, b); - 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); + if (retries--) { + printk(KERN_WARNING "VFS: Cannot open root device \"%s\" or %s, retrying in 1s.\n", + root_device_name, b); + ssleep(1); + goto retry; + } + printk(KERN_CRIT "VFS: Cannot open root device \"%s\" or %s, giving up.\n", + root_device_name, b); + printk(KERN_CRIT "Please append a correct \"root=\" boot option\n"); } panic("VFS: Unable to mount root fs on %s", __bdevname(ROOT_DEV, b)); out: