diff options
| author | Pavel Zakharov <pavel.zakharov@delphix.com> | 2016-07-22 10:39:36 -0400 |
|---|---|---|
| committer | Prakash Surya <prakash.surya@delphix.com> | 2018-02-13 08:24:50 -0800 |
| commit | 6f7938128a2c5e23f4b970ea101137eadd1470a1 (patch) | |
| tree | c9c25b9ad547df0d79ca75eacf41f351ada008c7 /usr/src/uts/common/fs/zfs/vdev_label.c | |
| parent | 6bb6b5762ca4b17cd5fb3c6c123f17489d5635aa (diff) | |
| download | illumos-joyent-6f7938128a2c5e23f4b970ea101137eadd1470a1.tar.gz | |
9075 Improve ZFS pool import/load process and corrupted pool recovery
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Andrew Stormont <andyjstormont@gmail.com>
Approved by: Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
Diffstat (limited to 'usr/src/uts/common/fs/zfs/vdev_label.c')
| -rw-r--r-- | usr/src/uts/common/fs/zfs/vdev_label.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/usr/src/uts/common/fs/zfs/vdev_label.c b/usr/src/uts/common/fs/zfs/vdev_label.c index be3b89ee37..7ccc672437 100644 --- a/usr/src/uts/common/fs/zfs/vdev_label.c +++ b/usr/src/uts/common/fs/zfs/vdev_label.c @@ -265,7 +265,7 @@ vdev_config_generate(spa_t *spa, vdev_t *vd, boolean_t getstats, fnvlist_add_uint64(nv, ZPOOL_CONFIG_WHOLE_DISK, vd->vdev_wholedisk); - if (vd->vdev_not_present) + if (vd->vdev_not_present && !(flags & VDEV_CONFIG_MISSING)) fnvlist_add_uint64(nv, ZPOOL_CONFIG_NOT_PRESENT, 1); if (vd->vdev_isspare) @@ -1062,6 +1062,11 @@ vdev_uberblock_load(vdev_t *rvd, uberblock_t *ub, nvlist_t **config) "txg %llu", spa->spa_name, (u_longlong_t)ub->ub_txg); *config = vdev_label_read_config(cb.ubl_vd, ub->ub_txg); + if (*config == NULL && spa->spa_extreme_rewind) { + vdev_dbgmsg(cb.ubl_vd, "failed to read label config. " + "Trying again without txg restrictions."); + *config = vdev_label_read_config(cb.ubl_vd, UINT64_MAX); + } if (*config == NULL) { vdev_dbgmsg(cb.ubl_vd, "failed to read label config"); } @@ -1088,7 +1093,7 @@ vdev_uberblock_sync_done(zio_t *zio) static void vdev_uberblock_sync(zio_t *zio, uberblock_t *ub, vdev_t *vd, int flags) { - for (int c = 0; c < vd->vdev_children; c++) + for (uint64_t c = 0; c < vd->vdev_children; c++) vdev_uberblock_sync(zio, ub, vd->vdev_child[c], flags); if (!vd->vdev_ops->vdev_op_leaf) |
