Date: Wed, 19 Oct 2011 10:56:45 -0700 From: Marcel Moolenaar <marcel@xcllnt.net> To: Andriy Gapon <avg@freebsd.org> Cc: Marcel Moolenaar <marcel@freebsd.org>, Arnaud Lacombe <lacombar@gmail.com>, FreeBSD Current <freebsd-current@freebsd.org> Subject: Re: possible mountroot regression Message-ID: <006E57CF-F21F-4245-935A-9F391F0BCBEA@xcllnt.net> In-Reply-To: <4E9DA38F.1040305@FreeBSD.org> References: <4E984BF9.4000700@FreeBSD.org> <1318607697-31950-1-git-send-email-lacombar@gmail.com> <4E9DA38F.1040305@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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.
>>=20
>> - Arnaud
>>=20
>> ---
>> sys/kern/vfs_mountroot.c | 45 =
+++++++++++++++++++++++----------------------
>> 1 files changed, 23 insertions(+), 22 deletions(-)
>>=20
>> 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 =3D EINVAL;
>> + printf("\nmountroot> ");
>> + gets(name, sizeof(name), GETS_ECHO);
>> + if (name[0] =3D=3D '?') {
>> + printf("\nList of GEOM managed disk devices:\n =
");
>> + g_dev_print();
>> + continue;
>> + }
>> + if (name[0] =3D=3D '.') {
>> + pause("rmask", hz);
>> + continue;
>> + }
>> + if (name[0] =3D=3D 'x' && name[1] =3D=3D '\0')
>> + break;
>> + mnt =3D name;
>> + error =3D parse_mount(&mnt);
>> + if (error < 0)
>> + printf("Invalid specification.\n");
>> + } while (error !=3D 0);
>>=20
>> - again:
>> - printf("\nmountroot> ");
>> - gets(name, sizeof(name), GETS_ECHO);
>> - if (name[0] =3D=3D '\0')
>> - return (0);
>> - if (name[0] =3D=3D '?') {
>> - printf("\nList of GEOM managed disk devices:\n ");
>> - g_dev_print();
>> - goto again;
>> - }
>> - if (name[0] =3D=3D '.') {
>> - pause("rmask", hz);
>> - goto again;
>> - }
>> - mnt =3D name;
>> - error =3D parse_mount(&mnt);
>> - if (error =3D=3D -1) {
>> - printf("Invalid specification.\n");
>> - goto again;
>> - }
>> return (error);
>> }
>>=20
>=20
> Arnaud,
>=20
> 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.
>=20
> Marcel,
>=20
> what do you think?
I like it.
> Would you be able to commit a variant of this patch sans the 'x' part?
>=20
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...
--=20
Marcel Moolenaar
marcel@xcllnt.net
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?006E57CF-F21F-4245-935A-9F391F0BCBEA>
