Skip site navigation (1)Skip section navigation (2)
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>