summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToomas Soome <tsoome@me.com>2018-02-11 18:07:26 +0200
committerRichard Lowe <richlowe@richlowe.net>2018-02-17 16:33:04 +0000
commit31898fe726d1ca3a719847c87e92cd9426558a3c (patch)
treeddb39b26c33817b06ef75dcfacb481be6dde6200
parent66492cf01c4f0eb178cb6e056451d04be61a0374 (diff)
downloadillumos-joyent-31898fe726d1ca3a719847c87e92cd9426558a3c.tar.gz
9099 loader: Solaris 2 partition may have no VTOC
Reviewed by: Andy Fiddaman <omnios@citrus-it.co.uk> Reviewed by: Alexander Eremin <alexander.eremin@nexenta.com> Approved by: Richard Lowe <richlowe@richlowe.net>
-rw-r--r--usr/src/boot/Makefile.version2
-rw-r--r--usr/src/boot/sys/boot/common/disk.c6
-rw-r--r--usr/src/boot/sys/boot/i386/gptzfsboot/zfsboot.c9
-rw-r--r--usr/src/boot/sys/boot/zfs/zfs.c5
4 files changed, 15 insertions, 7 deletions
diff --git a/usr/src/boot/Makefile.version b/usr/src/boot/Makefile.version
index 427065c3be..410c2d4b4a 100644
--- a/usr/src/boot/Makefile.version
+++ b/usr/src/boot/Makefile.version
@@ -33,4 +33,4 @@ LOADER_VERSION = 1.1
# 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
diff --git a/usr/src/boot/sys/boot/common/disk.c b/usr/src/boot/sys/boot/common/disk.c
index ca068d365d..61a4e38b1c 100644
--- a/usr/src/boot/sys/boot/common/disk.c
+++ b/usr/src/boot/sys/boot/common/disk.c
@@ -133,14 +133,16 @@ ptable_print(void *arg, const char *pname, const struct ptable_entry *part)
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);
}
}
diff --git a/usr/src/boot/sys/boot/i386/gptzfsboot/zfsboot.c b/usr/src/boot/sys/boot/i386/gptzfsboot/zfsboot.c
index bc1c4da24a..537fc898e7 100644
--- a/usr/src/boot/sys/boot/i386/gptzfsboot/zfsboot.c
+++ b/usr/src/boot/sys/boot/i386/gptzfsboot/zfsboot.c
@@ -613,11 +613,16 @@ probe_partition(void *arg, const char *partname,
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) {
diff --git a/usr/src/boot/sys/boot/zfs/zfs.c b/usr/src/boot/sys/boot/zfs/zfs.c
index 6843feae58..033e0d98d6 100644
--- a/usr/src/boot/sys/boot/zfs/zfs.c
+++ b/usr/src/boot/sys/boot/zfs/zfs.c
@@ -497,7 +497,7 @@ zfs_probe_partition(void *arg, const char *partname,
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 @@ zfs_probe_partition(void *arg, const char *partname,
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);
}
}