From 46b28a98f70a2da2a80c8dade6586885a4241f7f Mon Sep 17 00:00:00 2001 From: Stephen Hanson Date: Thu, 6 Nov 2008 01:51:55 -0800 Subject: 6767911 zfs scheme needs an fmd_fmri_replaced() interface --- usr/src/cmd/fm/schemes/zfs/scheme.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'usr/src') diff --git a/usr/src/cmd/fm/schemes/zfs/scheme.c b/usr/src/cmd/fm/schemes/zfs/scheme.c index 25258871b9..ffa8ebf7f5 100644 --- a/usr/src/cmd/fm/schemes/zfs/scheme.c +++ b/usr/src/cmd/fm/schemes/zfs/scheme.c @@ -23,8 +23,6 @@ * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include #include #include @@ -159,6 +157,34 @@ fmd_fmri_present(nvlist_t *nvl) return (ret); } +int +fmd_fmri_replaced(nvlist_t *nvl) +{ + uint64_t pool_guid, vdev_guid; + cbdata_t cb; + int ret; + + (void) nvlist_lookup_uint64(nvl, FM_FMRI_ZFS_POOL, &pool_guid); + + cb.cb_guid = pool_guid; + cb.cb_pool = NULL; + + if (zpool_iter(g_zfs, find_pool, &cb) != 1) + return (FMD_OBJ_STATE_NOT_PRESENT); + + if (nvlist_lookup_uint64(nvl, FM_FMRI_ZFS_VDEV, &vdev_guid) != 0) { + zpool_close(cb.cb_pool); + return (FMD_OBJ_STATE_STILL_PRESENT); + } + + ret = (find_vdev(cb.cb_pool, vdev_guid) != NULL) ? + FMD_OBJ_STATE_STILL_PRESENT : FMD_OBJ_STATE_NOT_PRESENT; + + zpool_close(cb.cb_pool); + + return (ret); +} + int fmd_fmri_unusable(nvlist_t *nvl) { -- cgit v1.2.3