svn commit: r239293 - head/sys/boot/common

Andrey V. Elsukov ae at FreeBSD.org
Wed Aug 15 10:11:29 UTC 2012


Author: ae
Date: Wed Aug 15 10:11:29 2012
New Revision: 239293
URL: http://svn.freebsd.org/changeset/base/239293

Log:
  Rework r239232 to unbreak ZFS detection on MBR slices.

Modified:
  head/sys/boot/common/disk.c

Modified: head/sys/boot/common/disk.c
==============================================================================
--- head/sys/boot/common/disk.c	Wed Aug 15 09:18:49 2012	(r239292)
+++ head/sys/boot/common/disk.c	Wed Aug 15 10:11:29 2012	(r239293)
@@ -187,16 +187,14 @@ disk_open(struct disk_devdesc *dev, off_
 		dev->d_offset = part.start;
 		if (dev->d_partition == 255)
 			goto out; /* Nothing more to do */
-		if (dev->d_partition == -1) {
-			/*
-			 * If we are looking at a BSD slice, and the
-			 * partition is < 0, assume the 'a' partition.
-			 */
-			if (part.type == PART_FREEBSD)
-				dev->d_partition = 0;
-			else
-				goto out;
-		}
+		/*
+		 * If d_partition < 0 and we are looking at a BSD slice,
+		 * then try to read BSD label, otherwise return the
+		 * whole MBR slice.
+		 */
+		if (dev->d_partition == -1 &&
+		    part.type != PART_FREEBSD)
+			goto out;
 		/* Try to read BSD label */
 		table = ptable_open(dev, part.end - part.start + 1,
 		    od->sectorsize, ptblread);
@@ -205,6 +203,16 @@ disk_open(struct disk_devdesc *dev, off_
 			rc = ENXIO;
 			goto out;
 		}
+		/*
+		 * If slice contains BSD label and d_partition < 0, then
+		 * assume the 'a' partition. Otherwise just return the
+		 * whole MBR slice, because it can contain ZFS.
+		 */
+		if (dev->d_partition < 0) {
+			if (ptable_gettype(table) != PTABLE_BSD)
+				goto out;
+			dev->d_partition = 0;
+		}
 		rc = ptable_getpart(table, &part, dev->d_partition);
 		if (rc != 0)
 			goto out;


More information about the svn-src-all mailing list