From owner-freebsd-stable Sun Mar 8 19:39:34 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id TAA13091 for freebsd-stable-outgoing; Sun, 8 Mar 1998 19:39:34 -0800 (PST) (envelope-from owner-freebsd-stable@FreeBSD.ORG) Received: from dingo.cdrom.com (dingo.cdrom.com [204.216.28.145]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id TAA13079 for ; Sun, 8 Mar 1998 19:39:24 -0800 (PST) (envelope-from mike@dingo.cdrom.com) Received: from dingo.cdrom.com (localhost [127.0.0.1]) by dingo.cdrom.com (8.8.8/8.8.5) with ESMTP id TAA12799; Sun, 8 Mar 1998 19:36:49 -0800 (PST) Message-Id: <199803090336.TAA12799@dingo.cdrom.com> X-Mailer: exmh version 2.0zeta 7/24/97 To: Robert Watson cc: Mike Smith , stable@FreeBSD.ORG Subject: Re: *HEADS UP* Important change warning. (short version) In-reply-to: Your message of "Sun, 08 Mar 1998 22:18:57 EST." Mime-Version: 1.0 Content-Type: multipart/mixed ; boundary="==_Exmh_19254586350" Date: Sun, 08 Mar 1998 19:36:48 -0800 From: Mike Smith Sender: owner-freebsd-stable@FreeBSD.ORG Precedence: bulk This is a multipart MIME message. --==_Exmh_19254586350 Content-Type: text/plain; charset=us-ascii > > When can we expect this change to appear in the -stable branch? I would > like to upgrade my stable systems to right before that change (I was mid > cvsup when I read your email) and then bring the change up on a test > machine first. The change to mount was committed a couple of hours ago; specifically revision 1.6.6.2 of src/sbin/mount/mount_ufs.c and revision 1.2.8.1 of src/sbin/mount/Makefile. My intention was to have the kernel side of the changes lag a little behind, but I had aimed to have them in before the 2.2.6-BETA goes down, which would most likely see them going out later this evening. If you are cvsupping the CVS repo, the files that you will want to watch are: src/sbin/mount/mount_ufs.c src/sbin/mount/Makefile src/sys/sys/reboot.h src/sys/i386/i386/autoconf.c Note that the last two haven't changed yet. All of the diffs are attached, should you want to get stuck into a test machine sooner. I would greatly appreciate any feedback that anyone has on this. --==_Exmh_19254586350 Content-Type: text/plain ; name="kerndiff.stable"; charset=us-ascii Content-Description: kerndiff.stable Content-Disposition: attachment; filename="kerndiff.stable" Index: i386/i386/autoconf.c =================================================================== RCS file: /local1/ncvs/src/sys/i386/i386/autoconf.c,v retrieving revision 1.56.2.8 diff -u -r1.56.2.8 autoconf.c --- autoconf.c 1998/01/08 12:30:28 1.56.2.8 +++ autoconf.c 1998/03/08 07:41:08 @@ -410,25 +410,26 @@ 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); @@ -438,9 +439,10 @@ */ 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'); } Index: sys/reboot.h =================================================================== RCS file: /local1/ncvs/src/sys/sys/reboot.h,v retrieving revision 1.14 diff -u -r1.14 reboot.h --- reboot.h 1996/10/16 00:19:39 1.14 +++ reboot.h 1998/03/08 07:40:49 @@ -82,6 +82,9 @@ #define B_CONTROLLERSHIFT 20 #define B_CONTROLLERMASK 0xf #define B_CONTROLLER(val) (((val)>>B_CONTROLLERSHIFT) & B_CONTROLLERMASK) +#define B_SLICESHIFT 20 +#define B_SLICEMASK 0xff +#define B_SLICE(val) (((val)>>B_SLICESHIFT) & B_SLICEMASK) #define B_UNITSHIFT 16 #define B_UNITMASK 0xf #define B_UNIT(val) (((val) >> B_UNITSHIFT) & B_UNITMASK) --==_Exmh_19254586350 Content-Type: text/plain; name="mntdiff.stable"; charset=us-ascii Content-Description: mntdiff.stable Content-Disposition: attachment; filename="mntdiff.stable" Index: Makefile =================================================================== RCS file: /local1/ncvs/src/sbin/mount/Makefile,v retrieving revision 1.2 diff -u -r1.2 Makefile --- Makefile 1994/08/05 02:42:04 1.2 +++ Makefile 1998/03/08 06:34:53 @@ -5,4 +5,7 @@ MAN8= mount.8 # We do NOT install the getmntopts.3 man page. +# We support the ROOTSLICE_HUNT hack +CFLAGS+=-DROOTSLICE_HUNT + .include Index: mount_ufs.c =================================================================== RCS file: /local1/ncvs/src/sbin/mount/mount_ufs.c,v retrieving revision 1.6.6.1 diff -u -r1.6.6.1 mount_ufs.c --- mount_ufs.c 1997/12/04 07:36:10 1.6.6.1 +++ mount_ufs.c 1998/03/08 07:23:17 @@ -76,6 +76,10 @@ int ch, mntflags; char *fs_name; struct vfsconf *vfc; +#ifdef ROOTSLICE_HUNT + int unit, slice, result; + char part, devbuf[MAXPATHLEN], devpfx[MAXPATHLEN]; +#endif mntflags = 0; optind = optreset = 1; /* Reset for parse of new argv. */ @@ -117,8 +121,37 @@ /*warnx("ufs: filesystem not found");*/ } } - +#ifdef ROOTSLICE_HUNT + result = -1; + /* + * If we are mounting root, and we have a mount of something that + * might be the compatability slice, try mounting other slices + * first. If the kernel has done the right thing and mounted + * the slice because the disk is really sliced, this will find + * the real root filesystem. If not, we'll try what was supplied. + */ + if (!strcmp(fs_name, "/") && + (sscanf(args.fspec, "%[^0-9]%d%c", devpfx, &unit, &part) == 3) && + (part >= 'a') && + (part <= 'h')) { + for (slice = 1; (slice < 32) && (result < 0); slice++) { + sprintf(devbuf, "%s%ds%d%c", + devpfx, unit, slice, part); + args.fspec = devbuf; + result = mount(vfc ? vfc->vfc_index : MOUNT_UFS, + fs_name, mntflags, &args); + } + args.fspec = argv[0]; + } + if (result == 0) + warnx("*** update /etc/fstab entry for %s to use %s ***", + fs_name, devbuf); + /* Try the mount as originally planned */ + if ((result < 0) && + (mount(vfc ? vfc->vfc_index : MOUNT_UFS, fs_name, mntflags, &args) < 0)) { +#else if (mount(vfc ? vfc->vfc_index : MOUNT_UFS, fs_name, mntflags, &args) < 0) { +#endif (void)fprintf(stderr, "%s on %s: ", args.fspec, fs_name); switch (errno) { case EMFILE: --==_Exmh_19254586350 Content-Type: text/plain; charset=us-ascii \\ Sometimes you're ahead, \\ Mike Smith \\ sometimes you're behind. \\ mike@smith.net.au \\ The race is long, and in the \\ msmith@freebsd.org \\ end it's only with yourself. \\ msmith@cdrom.com --==_Exmh_19254586350-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message