possible mountroot regression
Arnaud Lacombe
lacombar at gmail.com
Fri Oct 14 15:55:06 UTC 2011
Andry Gapon wrote:
> Simple: revert to the previous behavior. If a user enters incorrect device name
>(i.e. root mounting fails), then return back to the prompt instead of panicing.
That should do the job.
- Arnaud
---
sys/kern/vfs_mountroot.c | 45 +++++++++++++++++++++++----------------------
1 files changed, 23 insertions(+), 22 deletions(-)
diff --git a/sys/kern/vfs_mountroot.c b/sys/kern/vfs_mountroot.c
index ccbcb33..ae3ffa7 100644
--- a/sys/kern/vfs_mountroot.c
+++ b/sys/kern/vfs_mountroot.c
@@ -481,28 +481,29 @@ parse_dir_ask(char **conf)
printf("\n");
printf(" ? List valid disk boot devices\n");
printf(" . Yield 1 second (for background tasks)\n");
- printf(" <empty line> Abort manual input\n");
+ printf(" x Abort manual input)\n");
+
+ do {
+ error = EINVAL;
+ printf("\nmountroot> ");
+ gets(name, sizeof(name), GETS_ECHO);
+ if (name[0] == '?') {
+ printf("\nList of GEOM managed disk devices:\n ");
+ g_dev_print();
+ continue;
+ }
+ if (name[0] == '.') {
+ pause("rmask", hz);
+ continue;
+ }
+ if (name[0] == 'x' && name[1] == '\0')
+ break;
+ mnt = name;
+ error = parse_mount(&mnt);
+ if (error < 0)
+ printf("Invalid specification.\n");
+ } while (error != 0);
- again:
- printf("\nmountroot> ");
- gets(name, sizeof(name), GETS_ECHO);
- if (name[0] == '\0')
- return (0);
- if (name[0] == '?') {
- printf("\nList of GEOM managed disk devices:\n ");
- g_dev_print();
- goto again;
- }
- if (name[0] == '.') {
- pause("rmask", hz);
- goto again;
- }
- mnt = name;
- error = parse_mount(&mnt);
- if (error == -1) {
- printf("Invalid specification.\n");
- goto again;
- }
return (error);
}
--
1.7.6.153.g78432
More information about the freebsd-current
mailing list