diff options
| author | eschrock <none@none> | 2006-01-30 18:23:00 -0800 |
|---|---|---|
| committer | eschrock <none@none> | 2006-01-30 18:23:00 -0800 |
| commit | 46a2abf27af40eda17a3f97e79eda1aef4e3c3c8 (patch) | |
| tree | b740312752619df7c8e7a2e88b920b39097674fc /usr/src/lib/libzfs/common | |
| parent | 830363f48daa3fd97860418f205ea3097972757d (diff) | |
| download | illumos-joyent-46a2abf27af40eda17a3f97e79eda1aef4e3c3c8.tar.gz | |
6343802 zpool(1M) should make better use of libdiskmgt
6354197 setting env variable NOINUSE_CHECK causes zpool to core dump
6364275 internal error: disk configuration error 19 at line 518 of file zpool_vdev.c
Diffstat (limited to 'usr/src/lib/libzfs/common')
| -rw-r--r-- | usr/src/lib/libzfs/common/libzfs.h | 3 | ||||
| -rw-r--r-- | usr/src/lib/libzfs/common/libzfs_import.c | 31 |
2 files changed, 14 insertions, 20 deletions
diff --git a/usr/src/lib/libzfs/common/libzfs.h b/usr/src/lib/libzfs/common/libzfs.h index 63e394c376..7da0a674e0 100644 --- a/usr/src/lib/libzfs/common/libzfs.h +++ b/usr/src/lib/libzfs/common/libzfs.h @@ -261,8 +261,7 @@ extern int zfs_remove_link(zfs_handle_t *); /* * Given a device or file, determine if it is part of a pool. */ -extern int zpool_in_use(int fd, char **state, - char **name); +extern int zpool_in_use(int fd, pool_state_t *state, char **name); /* * ftyp special. Read the label from a given device. diff --git a/usr/src/lib/libzfs/common/libzfs_import.c b/usr/src/lib/libzfs/common/libzfs_import.c index b7eb81873d..6c56a1a2da 100644 --- a/usr/src/lib/libzfs/common/libzfs_import.c +++ b/usr/src/lib/libzfs/common/libzfs_import.c @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -670,16 +670,16 @@ find_guid(nvlist_t *nv, uint64_t guid) * must be freed by the caller. */ int -zpool_in_use(int fd, char **statestr, char **namestr) +zpool_in_use(int fd, pool_state_t *state, char **namestr) { nvlist_t *config; - uint64_t state; char *name; int ret; zfs_cmd_t zc = { 0 }; uint64_t guid, vdev_guid; zpool_handle_t *zhp; nvlist_t *pool_config; + uint64_t stateval; if ((config = zpool_read_label(fd)) == NULL) return (FALSE); @@ -687,16 +687,14 @@ zpool_in_use(int fd, char **statestr, char **namestr) verify(nvlist_lookup_string(config, ZPOOL_CONFIG_POOL_NAME, &name) == 0); verify(nvlist_lookup_uint64(config, ZPOOL_CONFIG_POOL_STATE, - &state) == 0); + &stateval) == 0); verify(nvlist_lookup_uint64(config, ZPOOL_CONFIG_POOL_GUID, &guid) == 0); verify(nvlist_lookup_uint64(config, ZPOOL_CONFIG_GUID, &vdev_guid) == 0); - switch (state) { + switch (stateval) { case POOL_STATE_EXPORTED: - *statestr = zfs_strdup(dgettext(TEXT_DOMAIN, "exported")); - *namestr = zfs_strdup(name); ret = TRUE; break; @@ -726,21 +724,12 @@ zpool_in_use(int fd, char **statestr, char **namestr) verify(nvlist_lookup_nvlist(pool_config, ZPOOL_CONFIG_VDEV_TREE, &nvroot) == 0); - if (find_guid(nvroot, vdev_guid)) { - *statestr = zfs_strdup( - dgettext(TEXT_DOMAIN, "active")); - *namestr = zfs_strdup(name); - ret = TRUE; - } else { - ret = FALSE; - } + ret = find_guid(nvroot, vdev_guid); } else { ret = FALSE; } } else { - *statestr = zfs_strdup(dgettext(TEXT_DOMAIN, - "potentially active")); - *namestr = zfs_strdup(name); + stateval = POOL_STATE_POTENTIALLY_ACTIVE; ret = TRUE; } break; @@ -749,6 +738,12 @@ zpool_in_use(int fd, char **statestr, char **namestr) ret = FALSE; } + + if (ret) { + *namestr = zfs_strdup(name); + *state = (pool_state_t)stateval; + } + nvlist_free(config); return (ret); } |
