hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
From bf05d6b172ecce03323e86dc554b70115048a51f Mon Sep 17 00:00:00 2001
From: Jeffy Chen <jeffy.chen@rock-chips.com>
Date: Fri, 9 Nov 2018 12:14:29 +0800
Subject: [PATCH 2/4] init/do_mounts.c: Retry all fs after failed to mount with
 "rootfstype="
 
Retry all filesystems when failed to mount with specified ones.
 
Change-Id: Ic1b794cc61d61f1d0715e3b32400b3e96b0dddea
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
---
 init/do_mounts.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)
 
diff --git a/init/do_mounts.c b/init/do_mounts.c
index b5f9604d0c98..d85f60d79107 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -423,12 +423,13 @@ static int __init do_mount_root(const char *name, const char *fs,
     return ret;
 }
 
-void __init mount_block_root(char *name, int flags)
+void __init mount_block_root(char *name, int mountflags)
 {
     struct page *page = alloc_page(GFP_KERNEL);
     char *fs_names = page_address(page);
     char *p;
     char b[BDEVNAME_SIZE];
+    int flags = mountflags;
 
     scnprintf(b, BDEVNAME_SIZE, "unknown-block(%u,%u)",
           MAJOR(ROOT_DEV), MINOR(ROOT_DEV));
@@ -464,6 +465,15 @@ void __init mount_block_root(char *name, int flags)
         goto retry;
     }
 
+    /* Retry all filesystems when failed to mount with specified ones */
+    if (root_fs_names) {
+        printk("Retrying all filesystems\n");
+        root_fs_names = NULL;
+        get_fs_names(fs_names);
+        flags = mountflags;
+        goto retry;
+    }
+
     printk("List of all partitions:\n");
     printk_all_partitions();
     printk("No filesystem could mount root, tried: ");
-- 
2.20.1