--- 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.