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
>> @@ -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);
>> }
>> 
> 
> 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
mar...@xcllnt.net


_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to