The root_wait logic is a bit obsfucated right now.  Expand it and move it
into a helper.

Signed-off-by: Christoph Hellwig <h...@lst.de>
---
 init/do_mounts.c | 32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/init/do_mounts.c b/init/do_mounts.c
index be6d14733ba02f..d5c06c1546e82c 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -606,6 +606,26 @@ void __init mount_root(char *root_device_name)
        }
 }
 
+/* wait for any asynchronous scanning to complete */
+static void __init wait_for_root(char *root_device_name)
+{
+       if (ROOT_DEV != 0)
+               return;
+
+       pr_info("Waiting for root device %s...\n", root_device_name);
+
+       for (;;) {
+               if (driver_probe_done()) {
+                       ROOT_DEV = name_to_dev_t(root_device_name);
+                       if (ROOT_DEV)
+                               break;
+               }
+               msleep(5);
+       }
+       async_synchronize_full();
+
+}
+
 static dev_t __init parse_root_device(char *root_device_name)
 {
        if (!strncmp(root_device_name, "mtd", 3) ||
@@ -642,16 +662,8 @@ void __init prepare_namespace(void)
        if (initrd_load(saved_root_name))
                goto out;
 
-       /* wait for any asynchronous scanning to complete */
-       if ((ROOT_DEV == 0) && root_wait) {
-               printk(KERN_INFO "Waiting for root device %s...\n",
-                       saved_root_name);
-               while (!driver_probe_done() ||
-                       (ROOT_DEV = name_to_dev_t(saved_root_name)) == 0)
-                       msleep(5);
-               async_synchronize_full();
-       }
-
+       if (root_wait)
+               wait_for_root(saved_root_name);
        mount_root(saved_root_name);
 out:
        devtmpfs_mount();
-- 
2.39.2

--
dm-devel mailing list
dm-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/dm-devel

Reply via email to