From: Daniel McNeil 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 */ _