summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorStephen Hanson <Stephen.Hanson@Sun.COM>2009-02-09 02:06:32 -0800
committerStephen Hanson <Stephen.Hanson@Sun.COM>2009-02-09 02:06:32 -0800
commitd5b8f72dcc21ae549bc00501dd26eeb2b94bf2ed (patch)
tree1dc270b1d03846d30e6acabcde4cb9aeb79650fc /usr/src
parent3bc3cf69284dcc842f5b10f4ac53b272a88b173a (diff)
downloadillumos-gate-d5b8f72dcc21ae549bc00501dd26eeb2b94bf2ed.tar.gz
6802281 fmadm is core dumping on snv_107
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/lib/fm/topo/libtopo/common/zfs.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/usr/src/lib/fm/topo/libtopo/common/zfs.c b/usr/src/lib/fm/topo/libtopo/common/zfs.c
index b7bcda4974..892b1668af 100644
--- a/usr/src/lib/fm/topo/libtopo/common/zfs.c
+++ b/usr/src/lib/fm/topo/libtopo/common/zfs.c
@@ -21,12 +21,10 @@
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -62,6 +60,8 @@ static const topo_modops_t zfs_ops =
static const topo_modinfo_t zfs_info =
{ ZFS, FM_FMRI_SCHEME_ZFS, ZFS_VERSION, &zfs_ops };
+static libzfs_handle_t *g_zfs;
+
int
zfs_init(topo_mod_t *mod, topo_version_t version)
{
@@ -81,6 +81,7 @@ zfs_init(topo_mod_t *mod, topo_version_t version)
"%s\n", topo_mod_errmsg(mod));
return (-1); /* mod errno already set */
}
+ g_zfs = libzfs_init();
return (0);
}
@@ -88,6 +89,8 @@ zfs_init(topo_mod_t *mod, topo_version_t version)
void
zfs_fini(topo_mod_t *mod)
{
+ libzfs_fini(g_zfs);
+ g_zfs = NULL;
topo_mod_unregister(mod);
}
@@ -113,8 +116,6 @@ typedef struct cbdata {
zpool_handle_t *cb_pool;
} cbdata_t;
-libzfs_handle_t *g_zfs;
-
static int
find_pool(zpool_handle_t *zhp, void *data)
{
@@ -147,7 +148,7 @@ fmri_nvl2str(nvlist_t *nvl, char *buf, size_t buflen)
cb.cb_guid = pool_guid;
cb.cb_pool = NULL;
- if (zpool_iter(g_zfs, find_pool, &cb) == 1) {
+ if (g_zfs != NULL && zpool_iter(g_zfs, find_pool, &cb) == 1) {
name = zpool_get_name(cb.cb_pool);
} else {
(void) snprintf(guidbuf, sizeof (guidbuf), "%llx", pool_guid);