changeset 18814:9c034bba7722

loader: Solaris 2 partition may have no VTOC illumos issue #9099
author Toomas Soome <tsoome@me.com>
date Sun, 11 Feb 2018 18:07:26 +0200
parents 275f2ccf7d09
children da63e15f779f
files usr/src/boot/Makefile.version usr/src/boot/sys/boot/common/disk.c usr/src/boot/sys/boot/i386/gptzfsboot/zfsboot.c usr/src/boot/sys/boot/zfs/zfs.c
diffstat 4 files changed, 15 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/boot/Makefile.version	Sun Jul 16 13:15:24 2017 +0300
+++ b/usr/src/boot/Makefile.version	Sun Feb 11 18:07:26 2018 +0200
@@ -33,4 +33,4 @@
 # Use date like formatting here, YYYY.MM.DD.XX, without leading zeroes.
 # The version is processed from left to right, the version number can only
 # be increased.
-BOOT_VERSION = $(LOADER_VERSION)-2017.9.11.1
+BOOT_VERSION = $(LOADER_VERSION)-2018.2.11.1
--- a/usr/src/boot/sys/boot/common/disk.c	Sun Jul 16 13:15:24 2017 +0300
+++ b/usr/src/boot/sys/boot/common/disk.c	Sun Feb 11 18:07:26 2018 +0200
@@ -133,14 +133,16 @@
 		    od->sectorsize) == 0) {
 			table = ptable_open(&dev, part->end - part->start + 1,
 			    od->sectorsize, ptblread);
-			if (table != NULL) {
+			if (table != NULL &&
+			    (ptable_gettype(table) == PTABLE_BSD ||
+			    ptable_gettype(table) == PTABLE_VTOC8)) {
 				sprintf(line, "  %s%s", pa->prefix, pname);
 				bsd.dev = &dev;
 				bsd.prefix = line;
 				bsd.verbose = pa->verbose;
 				ret = ptable_iterate(table, &bsd, ptable_print);
-				ptable_close(table);
 			}
+			ptable_close(table);
 			disk_close(&dev);
 		}
 	}
--- a/usr/src/boot/sys/boot/i386/gptzfsboot/zfsboot.c	Sun Jul 16 13:15:24 2017 +0300
+++ b/usr/src/boot/sys/boot/i386/gptzfsboot/zfsboot.c	Sun Feb 11 18:07:26 2018 +0200
@@ -613,11 +613,16 @@
 		table = ptable_open(&pa, part->end - part->start + 1,
 		    ppa->secsz, parttblread);
 		if (table != NULL) {
-			ret = ptable_iterate(table, &pa, probe_partition);
+			if (ptable_gettype(table) == PTABLE_VTOC8) {
+				ret = ptable_iterate(table, &pa,
+				    probe_partition);
+				ptable_close(table);
+				close(pa.fd);
+				return (ret);
+			}
 			ptable_close(table);
 		}
 		close(pa.fd);
-		return (ret);
 	}
 
 	if (ppa->offset + part->start == start_sector) {
--- a/usr/src/boot/sys/boot/zfs/zfs.c	Sun Jul 16 13:15:24 2017 +0300
+++ b/usr/src/boot/sys/boot/zfs/zfs.c	Sun Feb 11 18:07:26 2018 +0200
@@ -497,7 +497,7 @@
 	case PART_VTOC_SWAP:
 		return (ret);
 	default:
-		break;;
+		break;
 	}
 	ppa = (struct zfs_probe_args *)arg;
 	strncpy(devname, ppa->devname, strlen(ppa->devname) - 1);
@@ -516,7 +516,8 @@
 		table = ptable_open(&pa, part->end - part->start + 1,
 		    ppa->secsz, zfs_diskread);
 		if (table != NULL) {
-			ptable_iterate(table, &pa, zfs_probe_partition);
+			if (ptable_gettype(table) == PTABLE_VTOC8)
+				ptable_iterate(table, &pa, zfs_probe_partition);
 			ptable_close(table);
 		}
 	}