diff options
author | Brian Behlendorf <[email protected]> | 2017-12-04 11:50:35 -0800 |
---|---|---|
committer | GitHub <[email protected]> | 2017-12-04 11:50:35 -0800 |
commit | ea39f75f64ff72e30900a36e00632f180f5f6676 (patch) | |
tree | fe5d708335eeebaca59daba333510d142021d6be /cmd/zpool/zpool_vdev.c | |
parent | 72841b9fd957a392bb621393685b06dc042d4523 (diff) |
Fix 'zpool create|add' replication level check
When the pool configuration contains a hole due to a previous device
removal ignore this top level vdev. Failure to do so will result in
the current configuration being assessed to have a non-uniform
replication level and the expected warning will be disabled.
The zpool_add_010_pos test case was extended to cover this scenario.
Reviewed-by: George Melikov <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #6907
Closes #6911
Diffstat (limited to 'cmd/zpool/zpool_vdev.c')
-rw-r--r-- | cmd/zpool/zpool_vdev.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/cmd/zpool/zpool_vdev.c b/cmd/zpool/zpool_vdev.c index 04a2611f9..63a7101b8 100644 --- a/cmd/zpool/zpool_vdev.c +++ b/cmd/zpool/zpool_vdev.c @@ -801,8 +801,11 @@ get_replication(nvlist_t *nvroot, boolean_t fatal) if (is_log) continue; - verify(nvlist_lookup_string(nv, ZPOOL_CONFIG_TYPE, - &type) == 0); + /* Ignore holes introduced by removing aux devices */ + verify(nvlist_lookup_string(nv, ZPOOL_CONFIG_TYPE, &type) == 0); + if (strcmp(type, VDEV_TYPE_HOLE) == 0) + continue; + if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_CHILDREN, &child, &children) != 0) { /* |