diff options
author | Alan Somers <asomers@FreeBSD.org> | 2018-02-09 16:08:57 +0000 |
---|---|---|
committer | Alan Somers <asomers@FreeBSD.org> | 2018-02-09 16:08:57 +0000 |
commit | ad4bbe575b9d6f50debda6ecd1fb9a77770e179e (patch) | |
tree | c8646939ece0ffc76f97b82c6e551b21f4d207e1 /cddl/contrib/opensolaris/cmd/zpool | |
parent | 8162ec9b3505bc1f7f7a8cc5ee569582f373abcb (diff) | |
download | src-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.c | 15 |
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, |