Mercurial > unleashed > prev-conversion
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); } }