Re: possible mountroot regression

From: Marcel Moolenaar <marcel_at_xcllnt.net>
Date: Wed, 19 Oct 2011 10:56:45 -0700
On Oct 18, 2011, at 9:04 AM, Andriy Gapon wrote:

> on 14/10/2011 18:54 Arnaud Lacombe said the following:
>> 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
>> _at__at_ -481,28 +481,29 _at__at_ 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);
>> }
>> 
> 
> Arnaud,
> 
> I like how your change fixes the regression and improves code style.
> As you've said, the 'x' change is unrelated.  I like it, but it needs to be
> discussed and committed separately.
> 
> Marcel,
> 
> what do you think?

I like it.

> Would you be able to commit a variant of this patch sans the 'x' part?
> 

Yes, soonish. If people like the 'x' change I can do that in a followup
commit as well. I just need to know if people like it or not...

-- 
Marcel Moolenaar
marcel_at_xcllnt.net
Received on Wed Oct 19 2011 - 15:56:55 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:19 UTC