--- linux-6.1.12.old/init/do_mounts.c +++ linux-6.1.12/init/do_mounts.c @@ -393,6 +393,9 @@ void __init mount_block_root(char *name, int flags) { +#define MountBlockRootMaxRetries 40 + + int NumRetries = 0; struct page *page = alloc_page(GFP_KERNEL); char *fs_names = page_address(page); char *p; @@ -419,6 +422,16 @@ case -EINVAL: continue; } + + if (++NumRetries <= MountBlockRootMaxRetries) + { +printk ("VFS: Cannot open root device \"%s\" or %s, retrying\n", +pretty_name, b); + /* pause briefly and try again */ + current->__state = TASK_INTERRUPTIBLE; + schedule_timeout (HZ); + goto retry; + } /* * Allow the user to distinguish between failed sys_open * and bad superblock on root device.