Fix segfault in zpool iostat when adding VDEVs
Fix a segfault when running 'zpool iostat -v 1' while adding a VDEV. Reviewed-by: George Melikov <mail@gmelikov.ru> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Tony Hutter <hutter2@llnl.gov> Closes #6748 Closes #6872
This commit is contained in:
parent
1b2b0acab5
commit
674b89342e
|
@ -3648,7 +3648,7 @@ print_vdev_stats(zpool_handle_t *zhp, const char *name, nvlist_t *oldnv,
|
||||||
nvlist_t *newnv, iostat_cbdata_t *cb, int depth)
|
nvlist_t *newnv, iostat_cbdata_t *cb, int depth)
|
||||||
{
|
{
|
||||||
nvlist_t **oldchild, **newchild;
|
nvlist_t **oldchild, **newchild;
|
||||||
uint_t c, children;
|
uint_t c, children, oldchildren;
|
||||||
vdev_stat_t *oldvs, *newvs, *calcvs;
|
vdev_stat_t *oldvs, *newvs, *calcvs;
|
||||||
vdev_stat_t zerovs = { 0 };
|
vdev_stat_t zerovs = { 0 };
|
||||||
char *vname;
|
char *vname;
|
||||||
|
@ -3760,10 +3760,14 @@ children:
|
||||||
&newchild, &children) != 0)
|
&newchild, &children) != 0)
|
||||||
return (ret);
|
return (ret);
|
||||||
|
|
||||||
if (oldnv && nvlist_lookup_nvlist_array(oldnv, ZPOOL_CONFIG_CHILDREN,
|
if (oldnv) {
|
||||||
&oldchild, &c) != 0)
|
if (nvlist_lookup_nvlist_array(oldnv, ZPOOL_CONFIG_CHILDREN,
|
||||||
|
&oldchild, &oldchildren) != 0)
|
||||||
return (ret);
|
return (ret);
|
||||||
|
|
||||||
|
children = MIN(oldchildren, children);
|
||||||
|
}
|
||||||
|
|
||||||
for (c = 0; c < children; c++) {
|
for (c = 0; c < children; c++) {
|
||||||
uint64_t ishole = B_FALSE, islog = B_FALSE;
|
uint64_t ishole = B_FALSE, islog = B_FALSE;
|
||||||
|
|
||||||
|
@ -3818,10 +3822,14 @@ children:
|
||||||
&newchild, &children) != 0)
|
&newchild, &children) != 0)
|
||||||
return (ret);
|
return (ret);
|
||||||
|
|
||||||
if (oldnv && nvlist_lookup_nvlist_array(oldnv, ZPOOL_CONFIG_L2CACHE,
|
if (oldnv) {
|
||||||
&oldchild, &c) != 0)
|
if (nvlist_lookup_nvlist_array(oldnv, ZPOOL_CONFIG_L2CACHE,
|
||||||
|
&oldchild, &oldchildren) != 0)
|
||||||
return (ret);
|
return (ret);
|
||||||
|
|
||||||
|
children = MIN(oldchildren, children);
|
||||||
|
}
|
||||||
|
|
||||||
if (children > 0) {
|
if (children > 0) {
|
||||||
if ((!(cb->cb_flags & IOS_ANYHISTO_M)) && !cb->cb_scripted &&
|
if ((!(cb->cb_flags & IOS_ANYHISTO_M)) && !cb->cb_scripted &&
|
||||||
!cb->cb_vdev_names) {
|
!cb->cb_vdev_names) {
|
||||||
|
|
Loading…
Reference in New Issue