diff options
| author | Toomas Soome <tsoome@me.com> | 2018-02-11 18:07:26 +0200 |
|---|---|---|
| committer | Richard Lowe <richlowe@richlowe.net> | 2018-02-17 16:33:04 +0000 |
| commit | 31898fe726d1ca3a719847c87e92cd9426558a3c (patch) | |
| tree | ddb39b26c33817b06ef75dcfacb481be6dde6200 | |
| parent | 66492cf01c4f0eb178cb6e056451d04be61a0374 (diff) | |
| download | illumos-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.version | 2 | ||||
| -rw-r--r-- | usr/src/boot/sys/boot/common/disk.c | 6 | ||||
| -rw-r--r-- | usr/src/boot/sys/boot/i386/gptzfsboot/zfsboot.c | 9 | ||||
| -rw-r--r-- | usr/src/boot/sys/boot/zfs/zfs.c | 5 |
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); } } |
