diff options
Diffstat (limited to 'usr/src/lib/libzfs')
| -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);  } | 
