From f2dddd5e995930f3b21cd8a9db6be39f8ec2d347 Mon Sep 17 00:00:00 2001 From: Mike Smith Date: Sun, 8 Mar 1998 15:06:55 +0000 Subject: [PATCH] Construct the minor number for the root device taking into account the slice number passed in by the bootblocks. This means the kernel will not use the compatability slice to obtain the root filesystem when booting from a sliced disk. Use the extraction macros from reboot.h rather than stating them in full again. --- sys/amd64/amd64/autoconf.c | 18 ++++++++++-------- sys/i386/i386/autoconf.c | 18 ++++++++++-------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/sys/amd64/amd64/autoconf.c b/sys/amd64/amd64/autoconf.c index e40bda18552..c520e5b8c4c 100644 --- a/sys/amd64/amd64/autoconf.c +++ b/sys/amd64/amd64/autoconf.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)autoconf.c 7.1 (Berkeley) 5/9/91 - * $Id: autoconf.c,v 1.84 1998/01/24 02:54:12 eivind Exp $ + * $Id: autoconf.c,v 1.85 1998/01/30 11:32:39 phk Exp $ */ /* @@ -443,25 +443,26 @@ static char devname[][2] = { static void setroot() { - int majdev, mindev, unit, part, adaptor; + int majdev, mindev, unit, part, adaptor, slice; dev_t orootdev; /*printf("howto %x bootdev %x ", boothowto, bootdev);*/ if (boothowto & RB_DFLTROOT || (bootdev & B_MAGICMASK) != (u_long)B_DEVMAGIC) return; - majdev = (bootdev >> B_TYPESHIFT) & B_TYPEMASK; + majdev = B_TYPE(bootdev); + adaptor = B_ADAPTOR(bootdev); + unit = B_UNIT(bootdev); + slice = B_SLICE(bootdev); if (majdev > sizeof(devname) / sizeof(devname[0])) return; - adaptor = (bootdev >> B_ADAPTORSHIFT) & B_ADAPTORMASK; - unit = (bootdev >> B_UNITSHIFT) & B_UNITMASK; if (majdev == FDMAJOR) { part = RAW_PART; mindev = unit << FDUNITSHIFT; } else { part = (bootdev >> B_PARTITIONSHIFT) & B_PARTITIONMASK; - mindev = (unit << PARTITIONSHIFT) + part; + mindev = (slice << 16) + (unit << PARTITIONSHIFT) + part; } orootdev = rootdev; rootdev = makedev(majdev, mindev); @@ -471,9 +472,10 @@ setroot() */ if (rootdev == orootdev) return; - printf("changing root device to %c%c%d%c\n", + printf("changing root device to %c%c%ds%d%c\n", devname[majdev][0], devname[majdev][1], - mindev >> (majdev == FDMAJOR ? FDUNITSHIFT : PARTITIONSHIFT), + (mindev & 0xf) >> (majdev == FDMAJOR ? FDUNITSHIFT : PARTITIONSHIFT), + slice, part + 'a'); } diff --git a/sys/i386/i386/autoconf.c b/sys/i386/i386/autoconf.c index e40bda18552..c520e5b8c4c 100644 --- a/sys/i386/i386/autoconf.c +++ b/sys/i386/i386/autoconf.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)autoconf.c 7.1 (Berkeley) 5/9/91 - * $Id: autoconf.c,v 1.84 1998/01/24 02:54:12 eivind Exp $ + * $Id: autoconf.c,v 1.85 1998/01/30 11:32:39 phk Exp $ */ /* @@ -443,25 +443,26 @@ static char devname[][2] = { static void setroot() { - int majdev, mindev, unit, part, adaptor; + int majdev, mindev, unit, part, adaptor, slice; dev_t orootdev; /*printf("howto %x bootdev %x ", boothowto, bootdev);*/ if (boothowto & RB_DFLTROOT || (bootdev & B_MAGICMASK) != (u_long)B_DEVMAGIC) return; - majdev = (bootdev >> B_TYPESHIFT) & B_TYPEMASK; + majdev = B_TYPE(bootdev); + adaptor = B_ADAPTOR(bootdev); + unit = B_UNIT(bootdev); + slice = B_SLICE(bootdev); if (majdev > sizeof(devname) / sizeof(devname[0])) return; - adaptor = (bootdev >> B_ADAPTORSHIFT) & B_ADAPTORMASK; - unit = (bootdev >> B_UNITSHIFT) & B_UNITMASK; if (majdev == FDMAJOR) { part = RAW_PART; mindev = unit << FDUNITSHIFT; } else { part = (bootdev >> B_PARTITIONSHIFT) & B_PARTITIONMASK; - mindev = (unit << PARTITIONSHIFT) + part; + mindev = (slice << 16) + (unit << PARTITIONSHIFT) + part; } orootdev = rootdev; rootdev = makedev(majdev, mindev); @@ -471,9 +472,10 @@ setroot() */ if (rootdev == orootdev) return; - printf("changing root device to %c%c%d%c\n", + printf("changing root device to %c%c%ds%d%c\n", devname[majdev][0], devname[majdev][1], - mindev >> (majdev == FDMAJOR ? FDUNITSHIFT : PARTITIONSHIFT), + (mindev & 0xf) >> (majdev == FDMAJOR ? FDUNITSHIFT : PARTITIONSHIFT), + slice, part + 'a'); }