aboutsummaryrefslogtreecommitdiffstats
path: root/include/sys/spa_impl.h
diff options
context:
space:
mode:
authorDon Brady <[email protected]>2017-01-13 14:50:22 -0700
committerBrian Behlendorf <[email protected]>2017-01-13 13:50:22 -0800
commit38640550f28c5acd94621f3452fab428df469bdb (patch)
treee0baedb3e1caa828f829fa80e2a2638aa2e5815b /include/sys/spa_impl.h
parentfdbaf44ffbff109613fee5a04f190df5a34fdfcc (diff)
OpenZFS 7743 - per-vdev-zaps init path for upgrade
Authored by: Paul Dagnelie <[email protected]> Reviewed by: Matt Ahrens <[email protected]> Reviewed by: Pavel Zakharov <[email protected]> Reviewed by: George Wilson <[email protected]> Reviewed by: Don Brady <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Reviewed-by: Joe Stein <[email protected]> Ported-by: Don Brady <[email protected]> When loading a pool that had been created before the existance of per-vdev zaps, on a system that knows about per-vdev zaps, the per-vdev zaps will not be allocated and initialized. This appears to be because the logic that would have done so, in spa_sync_config_object(), is not reached under normal operation. It is only reached if spa_config_dirty_list is non-empty. The fix is to add another `AVZ_ACTION_` enum that will allow this code to be reached when we detect that we're loading an old pool, even when there are no dirty configs. OpenZFS-issue: https://www.illumos.org/issues/7743 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/e2d29d0 Closes #5582
Diffstat (limited to 'include/sys/spa_impl.h')
-rw-r--r--include/sys/spa_impl.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/include/sys/spa_impl.h b/include/sys/spa_impl.h
index b80764537..5f2a87309 100644
--- a/include/sys/spa_impl.h
+++ b/include/sys/spa_impl.h
@@ -120,7 +120,8 @@ typedef struct spa_taskqs {
typedef enum spa_all_vdev_zap_action {
AVZ_ACTION_NONE = 0,
AVZ_ACTION_DESTROY, /* Destroy all per-vdev ZAPs and the AVZ. */
- AVZ_ACTION_REBUILD /* Populate the new AVZ, see spa_avz_rebuild */
+ AVZ_ACTION_REBUILD, /* Populate the new AVZ, see spa_avz_rebuild */
+ AVZ_ACTION_INITIALIZE
} spa_avz_action_t;
struct spa {