diff options
| author | Garrett D'Amore <garrett@nexenta.com> | 2010-12-05 19:54:51 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@nexenta.com> | 2010-12-05 19:54:51 -0800 |
| commit | 6df8993a38afb6d317b6683918241d0656eecdba (patch) | |
| tree | 52446fb54133f18d48cd3bf17e3a56b2268078a3 | |
| parent | 87b7e378fad95c8133fa3d2be7b54b34fb8eb9a6 (diff) | |
| download | illumos-joyent-6df8993a38afb6d317b6683918241d0656eecdba.tar.gz | |
440 fma ZFS scheme fails to consider hot-spares properly
Reviewed by: gwr@nexenta.com
Reviewed by: rbg@openrgb.com
Reviewed by: lvskiprof@cox.net
Approved by: trisk@nexenta.com
| -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); } |
