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