aboutsummaryrefslogtreecommitdiff
path: root/cddl/contrib/opensolaris/cmd/zpool
diff options
context:
space:
mode:
authorAlan Somers <asomers@FreeBSD.org>2018-02-09 16:08:57 +0000
committerAlan Somers <asomers@FreeBSD.org>2018-02-09 16:08:57 +0000
commitad4bbe575b9d6f50debda6ecd1fb9a77770e179e (patch)
treec8646939ece0ffc76f97b82c6e551b21f4d207e1 /cddl/contrib/opensolaris/cmd/zpool
parent8162ec9b3505bc1f7f7a8cc5ee569582f373abcb (diff)
downloadsrc-ad4bbe575b9d6f50debda6ecd1fb9a77770e179e.tar.gz
src-ad4bbe575b9d6f50debda6ecd1fb9a77770e179e.zip
Fix "zpool add" crash when a replacing vdev has a spare child
Fix an assertion in zpool that causes a crash when running any "zpool add" command on a spare that contains a replacing vdev with a spare child. This likely affects Illumos, too. PR: 225546 MFC after: 3 weeks Sponsored by: Spectra Logic Corp Differential Revision: https://reviews.freebsd.org/D14138
Notes
Notes: svn path=/head/; revision=329067
Diffstat (limited to 'cddl/contrib/opensolaris/cmd/zpool')
-rw-r--r--cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c b/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c
index 9f98dbf98490..d860afcb6cc2 100644
--- a/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c
+++ b/cddl/contrib/opensolaris/cmd/zpool/zpool_vdev.c
@@ -688,6 +688,21 @@ get_replication(nvlist_t *nvroot, boolean_t fatal)
verify(nvlist_lookup_string(cnv,
ZPOOL_CONFIG_TYPE,
&childtype) == 0);
+ if (strcmp(childtype,
+ VDEV_TYPE_SPARE) == 0) {
+ /* We have a replacing vdev with
+ * a spare child. Get the first
+ * real child of the spare
+ */
+ verify(
+ nvlist_lookup_nvlist_array(
+ cnv,
+ ZPOOL_CONFIG_CHILDREN,
+ &rchild,
+ &rchildren) == 0);
+ assert(rchildren >= 2);
+ cnv = rchild[0];
+ }
}
verify(nvlist_lookup_string(cnv,