diff options
author | George Wilson <[email protected]> | 2012-12-14 12:38:04 -0800 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2013-01-08 10:35:42 -0800 |
commit | 3bc7e0fb0f3904eaf41e0b9768ebe2d042ae98aa (patch) | |
tree | a72896a0cabe59d930c2253078eca4877b5dbb27 /include | |
parent | 5ac0c30a94a0804080f0a89c9b7a31f8d4ab5708 (diff) |
Illumos #3090 and #3102
3090 vdev_reopen() during reguid causes vdev to be treated as corrupt
3102 vdev_uberblock_load() and vdev_validate() may read the wrong label
Reviewed by: Matthew Ahrens <[email protected]>
Reviewed by: Christopher Siden <[email protected]>
Reviewed by: Garrett D'Amore <[email protected]>
Approved by: Eric Schrock <[email protected]>
References:
illumos/illumos-gate@dfbb943217bf8ab22a1a9d2e9dca01d4da95ee0b
illumos changeset: 13777:b1e53580146d
https://www.illumos.org/issues/3090
https://www.illumos.org/issues/3102
Ported-by: Brian Behlendorf <[email protected]>
Closes #939
Diffstat (limited to 'include')
-rw-r--r-- | include/sys/fs/zfs.h | 1 | ||||
-rw-r--r-- | include/sys/spa_impl.h | 1 | ||||
-rw-r--r-- | include/sys/vdev.h | 2 |
3 files changed, 3 insertions, 1 deletions
diff --git a/include/sys/fs/zfs.h b/include/sys/fs/zfs.h index 61596f7d7..800eb7768 100644 --- a/include/sys/fs/zfs.h +++ b/include/sys/fs/zfs.h @@ -954,6 +954,7 @@ typedef enum history_internal_events { LOG_DS_USER_HOLD, LOG_DS_USER_RELEASE, LOG_POOL_SPLIT, + LOG_POOL_GUID_CHANGE, LOG_END } history_internal_events_t; diff --git a/include/sys/spa_impl.h b/include/sys/spa_impl.h index 85a825d08..65edc97f5 100644 --- a/include/sys/spa_impl.h +++ b/include/sys/spa_impl.h @@ -141,6 +141,7 @@ struct spa { vdev_t *spa_root_vdev; /* top-level vdev container */ uint64_t spa_config_guid; /* config pool guid */ uint64_t spa_load_guid; /* spa_load initialized guid */ + uint64_t spa_last_synced_guid; /* last synced guid */ list_t spa_config_dirty_list; /* vdevs with dirty config */ list_t spa_state_dirty_list; /* vdevs with dirty state */ spa_aux_vdev_t spa_spares; /* hot spares */ diff --git a/include/sys/vdev.h b/include/sys/vdev.h index 51eb855ee..8f297a917 100644 --- a/include/sys/vdev.h +++ b/include/sys/vdev.h @@ -141,7 +141,7 @@ extern nvlist_t *vdev_config_generate(spa_t *spa, vdev_t *vd, struct uberblock; extern uint64_t vdev_label_offset(uint64_t psize, int l, uint64_t offset); extern int vdev_label_number(uint64_t psise, uint64_t offset); -extern nvlist_t *vdev_label_read_config(vdev_t *vd, int label); +extern nvlist_t *vdev_label_read_config(vdev_t *vd, uint64_t txg); extern void vdev_uberblock_load(vdev_t *, struct uberblock *, nvlist_t **); typedef enum { |