diff options
Diffstat (limited to 'usr/src/cmd/fm')
| -rw-r--r-- | usr/src/cmd/fm/schemes/zfs/scheme.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/usr/src/cmd/fm/schemes/zfs/scheme.c b/usr/src/cmd/fm/schemes/zfs/scheme.c index c0922f4d89..b52760c537 100644 --- a/usr/src/cmd/fm/schemes/zfs/scheme.c +++ b/usr/src/cmd/fm/schemes/zfs/scheme.c @@ -21,6 +21,9 @@ /* * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. */ +/* + * Copyright 2010 Nexenta Systems, Inc. All rights reserved. + */ #include <fm/fmd_fmri.h> #include <strings.h> @@ -99,20 +102,28 @@ find_vdev_iter(nvlist_t *nv, uint64_t search) return (nv); if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_CHILDREN, - &child, &children) != 0) - return (NULL); + &child, &children) == 0) { - for (c = 0; c < children; c++) - if ((ret = find_vdev_iter(child[c], search)) != 0) - return (ret); + for (c = 0; c < children; c++) + if ((ret = find_vdev_iter(child[c], search)) != 0) + return (ret); + } if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_L2CACHE, - &child, &children) != 0) - return (NULL); + &child, &children) == 0) { - for (c = 0; c < children; c++) - if ((ret = find_vdev_iter(child[c], search)) != 0) - return (ret); + for (c = 0; c < children; c++) + if ((ret = find_vdev_iter(child[c], search)) != 0) + return (ret); + } + + if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_SPARES, + &child, &children) == 0) { + + for (c = 0; c < children; c++) + if ((ret = find_vdev_iter(child[c], search)) != 0) + return (ret); + } return (NULL); } |
