Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 Nov 2012 03:57:54 +0000 (UTC)
From:      Neel Natu <neel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r243323 - projects/bhyve/sys/boot/userboot/userboot
Message-ID:  <201211200357.qAK3vsBR018112@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: neel
Date: Tue Nov 20 03:57:54 2012
New Revision: 243323
URL: http://svnweb.freebsd.org/changeset/base/243323

Log:
  disk_open() is smart enough to detect MBR and GPT partitions. If it is neither
  then fall back to accessing the disk as a raw device.
  
  As an example this is useful when booting the guest from an ISO image file.
  
  Discussed with:	grehan
  Obtained from:	NetApp

Modified:
  projects/bhyve/sys/boot/userboot/userboot/main.c

Modified: projects/bhyve/sys/boot/userboot/userboot/main.c
==============================================================================
--- projects/bhyve/sys/boot/userboot/userboot/main.c	Tue Nov 20 03:21:26 2012	(r243322)
+++ projects/bhyve/sys/boot/userboot/userboot/main.c	Tue Nov 20 03:57:54 2012	(r243323)
@@ -143,7 +143,6 @@ static void
 extract_currdev(void)
 {
 	struct disk_devdesc dev;
-	int gpt, rc;
 
 	//bzero(&dev, sizeof(dev));
 
@@ -153,37 +152,15 @@ extract_currdev(void)
 		dev.d_unit = 0;
 		dev.d_slice = 0;
 		dev.d_partition = 0;
-
 		/*
-		 * The priority is GPT, MBR and raw disk. Unfortunately,
-		 * disk_open() doesn't really get this right so first
-		 * probe for MBR, and then GPT. If GPT fails, re-probe
-		 * MBR if it succeeded, else assume raw.
+		 * Figure out if we are using MBR or GPT.
+		 * If neither, then access the disk as a raw device.
 		 */
-		rc = (*dev.d_dev->dv_open)(NULL, &dev);
-
-		dev.d_unit = 0;
-		dev.d_slice = 0;
-		dev.d_partition = 255;
-		gpt = (*dev.d_dev->dv_open)(NULL, &dev);
-
-		if (gpt) {
-			dev.d_unit = 0;
-			dev.d_slice = 0;
-			dev.d_partition = 0;
-			
-			if (!rc) {
-				(void) (*dev.d_dev->dv_open)(NULL, &dev);
-			} else {
-				/*
-				 * Force raw disk access
-				 */
-				dev.d_slice = -1;
-				dev.d_partition = -1;
-				dev.d_offset = 0;
-			}
+		if ((*dev.d_dev->dv_open)(NULL, &dev)) {
+			dev.d_slice = -1;
+			dev.d_partition = -1;
+			dev.d_offset = 0;
 		}
-
 	} else {
 		dev.d_dev = &host_dev;
 		dev.d_type = dev.d_dev->dv_type;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201211200357.qAK3vsBR018112>