diff options
author | Toomas Soome <tsoome@me.com> | 2020-06-26 21:19:32 +0300 |
---|---|---|
committer | Toomas Soome <tsoome@me.com> | 2020-06-27 18:13:55 +0300 |
commit | 9117d17eb29235fc103fe0fa874b149d3f8a9a0e (patch) | |
tree | d052183132b8ec1917132714ff8fa52792dda672 /usr/src | |
parent | 9b9e3196fde9c0f47c8cc4ab00f3bc5b539ceaca (diff) | |
download | illumos-joyent-9117d17eb29235fc103fe0fa874b149d3f8a9a0e.tar.gz |
12901 loader: can not read zfs pool with slog removed
Reviewed by: Yuri Pankov <ypankov@tintri.com>
Reviewed by: Patrick Mooney <pmooney@pfmooney.com>
Approved by: Robert Mustacchi <rm@fingolfin.org>
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/boot/Makefile.version | 2 | ||||
-rw-r--r-- | usr/src/boot/lib/libstand/zfs/zfsimpl.c | 14 |
2 files changed, 13 insertions, 3 deletions
diff --git a/usr/src/boot/Makefile.version b/usr/src/boot/Makefile.version index f48764b495..190a1148e6 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)-2020.06.10.1 +BOOT_VERSION = $(LOADER_VERSION)-2020.06.26.1 diff --git a/usr/src/boot/lib/libstand/zfs/zfsimpl.c b/usr/src/boot/lib/libstand/zfs/zfsimpl.c index ce3180d493..4b3d64de60 100644 --- a/usr/src/boot/lib/libstand/zfs/zfsimpl.c +++ b/usr/src/boot/lib/libstand/zfs/zfsimpl.c @@ -996,6 +996,13 @@ vdev_disk_read(vdev_t *vdev, const blkptr_t *bp, void *buf, offset + VDEV_LABEL_START_SIZE, bytes)); } +static int +vdev_missing_read(vdev_t *vdev __unused, const blkptr_t *bp __unused, + void *buf __unused, off_t offset __unused, size_t bytes __unused) +{ + + return (ENOTSUP); +} static int vdev_mirror_read(vdev_t *vdev, const blkptr_t *bp, void *buf, @@ -1135,9 +1142,10 @@ vdev_init(uint64_t guid, const unsigned char *nvlist, vdev_t **vdevp) #endif memcmp(type, VDEV_TYPE_RAIDZ, len) != 0 && memcmp(type, VDEV_TYPE_INDIRECT, len) != 0 && - memcmp(type, VDEV_TYPE_REPLACING, len) != 0) { + memcmp(type, VDEV_TYPE_REPLACING, len) != 0 && + memcmp(type, VDEV_TYPE_HOLE, len) != 0) { printf("ZFS: can only boot from disk, mirror, raidz1, " - "raidz2 and raidz3 vdevs\n"); + "raidz2 and raidz3 vdevs, got: %.*s\n", len, type); return (EIO); } @@ -1168,6 +1176,8 @@ vdev_init(uint64_t guid, const unsigned char *nvlist, vdev_t **vdevp) DATA_TYPE_UINT64, NULL, &vic->vic_prev_indirect_vdev, NULL); } + } else if (memcmp(type, VDEV_TYPE_HOLE, len) == 0) { + vdev = vdev_create(guid, vdev_missing_read); } else { vdev = vdev_create(guid, vdev_disk_read); } |