usr/src/cmd/fm/schemes/zfs/scheme.c
author eschrock
Wed, 14 May 2008 15:15:08 -0700
changeset 6643 3a34b0dbb107
parent 5094 71a3e95fb9e2
child 8021 b8fe9660eb2d
permissions -rw-r--r--
6625086 changing cachefile doesn't remove old cache on last user 6633599 need a mechanism to import faulted pools 6646102 hot spares are not activated when opening a pool 6646106 ZFS DE is overly complicated 6646195 ZFS DE leaks pool handles 6646618 want dataset GUIDs as a property in libzfs 6662441 L2ARC FMA support 6687745 zdb -U doesn't work with anything but pool names 6687750 ::spa_vdevs should print out cache devices 6687753 cache devices should support offline/online 6687766 ZFS should post a sysevent when config changes 6688366 bad indentation for 'casesensitivity' property in 'zfs get' help 6689223 spa_create() can leave namespace lock held if property validation fails 6690884 setting zfs_no_write_throttle panics system 6691266 zpool_read_label() needs to use pread64() 6694185 nv_priv_init() doesn't bzero structure completely 6694186 ses_plugin_dlclose is backwards 6697754 ses2 plugin crash when setting invalid property
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
     1
/*
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
     2
 * CDDL HEADER START
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
     3
 *
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
     5
 * Common Development and Distribution License (the "License").
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
     6
 * You may not use this file except in compliance with the License.
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
     7
 *
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    11
 * and limitations under the License.
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    12
 *
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    18
 *
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    19
 * CDDL HEADER END
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    20
 */
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    21
/*
6643
3a34b0dbb107 6625086 changing cachefile doesn't remove old cache on last user
eschrock
parents: 5094
diff changeset
    22
 * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    23
 * Use is subject to license terms.
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    24
 */
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    25
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    26
#pragma ident	"%Z%%M%	%I%	%E% SMI"
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    27
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    28
#include <fm/fmd_fmri.h>
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    29
#include <strings.h>
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    30
#include <libzfs.h>
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    31
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    32
typedef struct cbdata {
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    33
	uint64_t	cb_guid;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    34
	zpool_handle_t	*cb_pool;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    35
} cbdata_t;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    36
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    37
libzfs_handle_t *g_zfs;
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    38
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    39
static int
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    40
find_pool(zpool_handle_t *zhp, void *data)
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    41
{
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    42
	cbdata_t *cbp = data;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    43
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 2082
diff changeset
    44
	if (zpool_get_prop_int(zhp, ZPOOL_PROP_GUID, NULL) == cbp->cb_guid) {
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    45
		cbp->cb_pool = zhp;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    46
		return (1);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    47
	}
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    48
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    49
	zpool_close(zhp);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    50
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    51
	return (0);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    52
}
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    53
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    54
ssize_t
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    55
fmd_fmri_nvl2str(nvlist_t *nvl, char *buf, size_t buflen)
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    56
{
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    57
	uint64_t pool_guid, vdev_guid;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    58
	cbdata_t cb;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    59
	ssize_t len;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    60
	const char *name;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    61
	char guidbuf[64];
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    62
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    63
	(void) nvlist_lookup_uint64(nvl, FM_FMRI_ZFS_POOL, &pool_guid);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    64
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    65
	/*
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    66
	 * Attempt to convert the pool guid to a name.
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    67
	 */
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    68
	cb.cb_guid = pool_guid;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    69
	cb.cb_pool = NULL;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    70
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    71
	if (zpool_iter(g_zfs, find_pool, &cb) == 1) {
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    72
		name = zpool_get_name(cb.cb_pool);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    73
	} else {
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    74
		(void) snprintf(guidbuf, sizeof (guidbuf), "%llx", pool_guid);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    75
		name = guidbuf;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    76
	}
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    77
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    78
	if (nvlist_lookup_uint64(nvl, FM_FMRI_ZFS_VDEV, &vdev_guid) == 0)
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    79
		len = snprintf(buf, buflen, "%s://pool=%s/vdev=%llx",
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    80
		    FM_FMRI_SCHEME_ZFS, name, vdev_guid);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    81
	else
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    82
		len = snprintf(buf, buflen, "%s://pool=%s",
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    83
		    FM_FMRI_SCHEME_ZFS, name);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    84
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    85
	if (cb.cb_pool)
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    86
		zpool_close(cb.cb_pool);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    87
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    88
	return (len);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    89
}
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    90
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    91
static nvlist_t *
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    92
find_vdev_iter(nvlist_t *nv, uint64_t search)
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    93
{
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    94
	uint_t c, children;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    95
	nvlist_t **child;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    96
	uint64_t guid;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    97
	nvlist_t *ret;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    98
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
    99
	(void) nvlist_lookup_uint64(nv, ZPOOL_CONFIG_GUID, &guid);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   100
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   101
	if (search == guid)
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   102
		return (nv);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   103
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   104
	if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_CHILDREN,
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   105
	    &child, &children) != 0)
6643
3a34b0dbb107 6625086 changing cachefile doesn't remove old cache on last user
eschrock
parents: 5094
diff changeset
   106
		return (NULL);
3a34b0dbb107 6625086 changing cachefile doesn't remove old cache on last user
eschrock
parents: 5094
diff changeset
   107
3a34b0dbb107 6625086 changing cachefile doesn't remove old cache on last user
eschrock
parents: 5094
diff changeset
   108
	for (c = 0; c < children; c++)
3a34b0dbb107 6625086 changing cachefile doesn't remove old cache on last user
eschrock
parents: 5094
diff changeset
   109
		if ((ret = find_vdev_iter(child[c], search)) != 0)
3a34b0dbb107 6625086 changing cachefile doesn't remove old cache on last user
eschrock
parents: 5094
diff changeset
   110
			return (ret);
3a34b0dbb107 6625086 changing cachefile doesn't remove old cache on last user
eschrock
parents: 5094
diff changeset
   111
3a34b0dbb107 6625086 changing cachefile doesn't remove old cache on last user
eschrock
parents: 5094
diff changeset
   112
	if (nvlist_lookup_nvlist_array(nv, ZPOOL_CONFIG_L2CACHE,
3a34b0dbb107 6625086 changing cachefile doesn't remove old cache on last user
eschrock
parents: 5094
diff changeset
   113
	    &child, &children) != 0)
3a34b0dbb107 6625086 changing cachefile doesn't remove old cache on last user
eschrock
parents: 5094
diff changeset
   114
		return (NULL);
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   115
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   116
	for (c = 0; c < children; c++)
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   117
		if ((ret = find_vdev_iter(child[c], search)) != 0)
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   118
			return (ret);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   119
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   120
	return (NULL);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   121
}
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   122
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   123
static nvlist_t *
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   124
find_vdev(zpool_handle_t *zhp, uint64_t guid)
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   125
{
6643
3a34b0dbb107 6625086 changing cachefile doesn't remove old cache on last user
eschrock
parents: 5094
diff changeset
   126
	nvlist_t *config, *nvroot;
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   127
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   128
	config = zpool_get_config(zhp, NULL);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   129
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   130
	(void) nvlist_lookup_nvlist(config, ZPOOL_CONFIG_VDEV_TREE, &nvroot);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   131
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   132
	return (find_vdev_iter(nvroot, guid));
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   133
}
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   134
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   135
int
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   136
fmd_fmri_present(nvlist_t *nvl)
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   137
{
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   138
	uint64_t pool_guid, vdev_guid;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   139
	cbdata_t cb;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   140
	int ret;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   141
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   142
	(void) nvlist_lookup_uint64(nvl, FM_FMRI_ZFS_POOL, &pool_guid);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   143
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   144
	cb.cb_guid = pool_guid;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   145
	cb.cb_pool = NULL;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   146
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   147
	if (zpool_iter(g_zfs, find_pool, &cb) != 1)
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   148
		return (0);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   149
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   150
	if (nvlist_lookup_uint64(nvl, FM_FMRI_ZFS_VDEV, &vdev_guid) != 0) {
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   151
		zpool_close(cb.cb_pool);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   152
		return (1);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   153
	}
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   154
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   155
	ret = (find_vdev(cb.cb_pool, vdev_guid) != NULL);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   156
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   157
	zpool_close(cb.cb_pool);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   158
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   159
	return (ret);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   160
}
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   161
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   162
int
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   163
fmd_fmri_unusable(nvlist_t *nvl)
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   164
{
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   165
	uint64_t pool_guid, vdev_guid;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   166
	cbdata_t cb;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   167
	nvlist_t *vd;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   168
	int ret;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   169
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   170
	(void) nvlist_lookup_uint64(nvl, FM_FMRI_ZFS_POOL, &pool_guid);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   171
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   172
	cb.cb_guid = pool_guid;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   173
	cb.cb_pool = NULL;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   174
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   175
	if (zpool_iter(g_zfs, find_pool, &cb) != 1)
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   176
		return (1);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   177
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   178
	if (nvlist_lookup_uint64(nvl, FM_FMRI_ZFS_VDEV, &vdev_guid) != 0) {
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   179
		ret = (zpool_get_state(cb.cb_pool) == POOL_STATE_UNAVAIL);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   180
		zpool_close(cb.cb_pool);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   181
		return (ret);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   182
	}
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   183
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   184
	vd = find_vdev(cb.cb_pool, vdev_guid);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   185
	if (vd == NULL) {
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   186
		ret = 1;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   187
	} else {
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   188
		vdev_stat_t *vs;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   189
		uint_t c;
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   190
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   191
		(void) nvlist_lookup_uint64_array(vd, ZPOOL_CONFIG_STATS,
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   192
		    (uint64_t **)&vs, &c);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   193
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   194
		ret = (vs->vs_state < VDEV_STATE_DEGRADED);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   195
	}
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   196
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   197
	zpool_close(cb.cb_pool);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   198
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   199
	return (ret);
938876158511 PSARC 2006/077 zpool clear
eschrock
parents:
diff changeset
   200
}
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   201
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   202
int
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   203
fmd_fmri_init(void)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   204
{
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   205
	g_zfs = libzfs_init();
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   206
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   207
	if (g_zfs == NULL)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   208
		return (-1);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   209
	else
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   210
		return (0);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   211
}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   212
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   213
void
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   214
fmd_fmri_fini(void)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   215
{
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   216
	if (g_zfs)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   217
		libzfs_fini(g_zfs);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   218
}