From: Daniel McNeil <daniel@osdl.org>

The problem is being caused by the dev_t changes that now print out
dev_t's as major:minor instead of a hex value.  See print_dev_t().

This patch changes try_name() in init/do_mounts.c to get the major
and minor and return a MKDEV(major, minor).  I've tested this on
my machines and it boots with root=/dev/hda2.



 init/do_mounts.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff -puN init/do_mounts.c~rootdisk-parsing-fix init/do_mounts.c
--- 25/init/do_mounts.c~rootdisk-parsing-fix	2003-07-25 20:26:09.000000000 -0700
+++ 25-akpm/init/do_mounts.c	2003-07-25 20:26:09.000000000 -0700
@@ -58,6 +58,7 @@ static dev_t __init try_name(char *name,
 	char *s;
 	int len;
 	int fd;
+	unsigned int maj, min;
 
 	/* read device number from .../dev */
 
@@ -70,8 +71,12 @@ static dev_t __init try_name(char *name,
 	if (len <= 0 || len == 32 || buf[len - 1] != '\n')
 		goto fail;
 	buf[len - 1] = '\0';
-	res = (dev_t) simple_strtoul(buf, &s, 16);
-	if (*s)
+	/*
+	 * The format of dev is now %u:%u -- see print_dev_t()
+	 */
+	if (sscanf(buf, "%u:%u", &maj, &min) == 2)
+		res = MKDEV(maj, min);
+	else
 		goto fail;
 
 	/* if it's there and we are not looking for a partition - that's it */

_