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