Module Name:    src
Committed By:   mlelstv
Date:           Sat Jan  5 18:03:41 UTC 2019

Modified Files:
        src/sys/kern: kern_subr.c

Log Message:
Restore code to create md0, this fixes booting an INSTALL kernel.


To generate a diff of this commit:
cvs rdiff -u -r1.221 -r1.222 src/sys/kern/kern_subr.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/kern_subr.c
diff -u src/sys/kern/kern_subr.c:1.221 src/sys/kern/kern_subr.c:1.222
--- src/sys/kern/kern_subr.c:1.221	Sat Jan  5 09:39:56 2019
+++ src/sys/kern/kern_subr.c	Sat Jan  5 18:03:41 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_subr.c,v 1.221 2019/01/05 09:39:56 mlelstv Exp $	*/
+/*	$NetBSD: kern_subr.c,v 1.222 2019/01/05 18:03:41 mlelstv Exp $	*/
 
 /*-
  * Copyright (c) 1997, 1998, 1999, 2002, 2007, 2008 The NetBSD Foundation, Inc.
@@ -79,7 +79,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_subr.c,v 1.221 2019/01/05 09:39:56 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_subr.c,v 1.222 2019/01/05 18:03:41 mlelstv Exp $");
 
 #include "opt_ddb.h"
 #include "opt_md.h"
@@ -112,6 +112,7 @@ static device_t parsedisk(char *, int, i
 static const char *getwedgename(const char *, int);
 
 static void setroot_nfs(device_t);
+static void setroot_md(device_t *);
 static void setroot_ask(device_t, int);
 static void setroot_root(device_t, int);
 static void setroot_dump(device_t, device_t);
@@ -193,7 +194,7 @@ setroot(device_t bootdv, int bootpartiti
 	 * force boot device to md0
 	 */
 	if (md_is_root)
-		rootspec = "md0";
+		setroot_md(&bootdv);
 
 #ifdef TFTPROOT
 	/*
@@ -203,10 +204,10 @@ setroot(device_t bootdv, int bootpartiti
 	 * reuses NFS init code to set up network
 	 * fetch image into ram disk
 	 *
-	 * if successful, we change rootspec
+	 * if successful, we change boot device
 	 */
 	if (tftproot_dhcpboot(bootdv) == 0)
-		rootspec = "md0";
+		setroot_md(&bootdv);
 #endif
 	
 	/*
@@ -280,6 +281,25 @@ setroot_nfs(device_t dv)
 		vfs_delref(vops);
 }
 
+/*
+ * Change boot device to md0
+ *
+ * md0 only exists when it is opened once.
+ */
+static void
+setroot_md(device_t *dvp)
+{
+	int md_major;
+	dev_t md_dev;
+
+	md_major = devsw_name2blk("md", NULL, 0);
+	if (md_major >= 0) {
+		md_dev = MAKEDISKDEV(md_major, 0, RAW_PART);
+		if (bdev_open(md_dev, FREAD, S_IFBLK, curlwp) == 0)
+			*dvp = device_find_by_xname("md0");
+	}
+}
+
 static void
 setroot_ask(device_t bootdv, int bootpartition)
 {

Reply via email to