FreeBSD/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_config.c
/*
 * Iterate over all pools in the system.
 */
Iterate over all pools in the system.
Iterate over all pools in the system .
int
zpool_iter(libzfs_handle_t *hdl, zpool_iter_f func, void *data)
{
	config_node_t *cn;
	zpool_handle_t *zhp;
	int ret;
	if (!hdl->libzfs_pool_iter && namespace_reload(hdl) != 0)
		return (-1);
	hdl->libzfs_pool_iter++;
	for (cn = uu_avl_first(hdl->libzfs_ns_avl); cn != NULL;
	    cn = uu_avl_next(hdl->libzfs_ns_avl, cn)) {
		if (check_restricted(cn->cn_name))
			continue;
		if (zpool_open_silent(hdl, cn->cn_name, &zhp) != 0) {
			hdl->libzfs_pool_iter--;
			return (-1);
		}
		if (zhp == NULL)
			continue;
		if ((ret = func(zhp, data)) != 0) {
			hdl->libzfs_pool_iter--;
			return (ret);
		}
	}
	hdl->libzfs_pool_iter--;
	return (0);
}
int zpool_iter ( libzfs_handle_t * hdl , zpool_iter_f func , void * data ) { config_node_t * cn ; zpool_handle_t * zhp ; int ret ; if ( ! hdl -> libzfs_pool_iter && namespace_reload ( hdl ) != 0 ) return ( -1 ) ; hdl -> libzfs_pool_iter ++ ; for ( cn = uu_avl_first ( hdl -> libzfs_ns_avl ) ; cn != NULL ; cn = uu_avl_next ( hdl -> libzfs_ns_avl , cn ) ) { if ( check_restricted ( cn -> cn_name ) ) continue ; if ( zpool_open_silent ( hdl , cn -> cn_name , & zhp ) != 0 ) { hdl -> libzfs_pool_iter -- ; return ( -1 ) ; } if ( zhp == NULL ) continue ; if ( ( ret = func ( zhp , data ) ) != 0 ) { hdl -> libzfs_pool_iter -- ; return ( ret ) ; } } hdl -> libzfs_pool_iter -- ; return ( 0 ) ; }
Iterate over all pools in the system.
Iterate over all pools in the system .
/*
	 * If someone makes a recursive call to zpool_iter(), we want to avoid
	 * refreshing the namespace because that will invalidate the parent
	 * context.  We allow recursive calls, but simply re-use the same
	 * namespace AVL tree.
	 */