summaryrefslogtreecommitdiff
path: root/usr/src/cmd/fm
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/fm')
-rw-r--r--usr/src/cmd/fm/schemes/zfs/scheme.c31
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);
}