libzfs_jni_pool.c revision c8e9ed14d97e244b9753db14caf8481f181f5750
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*
fa9e4066f08beec538e775443c5be79dd423fcabahrens * CDDL HEADER START
fa9e4066f08beec538e775443c5be79dd423fcabahrens *
fa9e4066f08beec538e775443c5be79dd423fcabahrens * The contents of this file are subject to the terms of the
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Common Development and Distribution License, Version 1.0 only
fa9e4066f08beec538e775443c5be79dd423fcabahrens * (the "License"). You may not use this file except in compliance
fa9e4066f08beec538e775443c5be79dd423fcabahrens * with the License.
fa9e4066f08beec538e775443c5be79dd423fcabahrens *
fa9e4066f08beec538e775443c5be79dd423fcabahrens * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
fa9e4066f08beec538e775443c5be79dd423fcabahrens * or http://www.opensolaris.org/os/licensing.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * See the License for the specific language governing permissions
fa9e4066f08beec538e775443c5be79dd423fcabahrens * and limitations under the License.
fa9e4066f08beec538e775443c5be79dd423fcabahrens *
fa9e4066f08beec538e775443c5be79dd423fcabahrens * When distributing Covered Code, include this CDDL HEADER in each
fa9e4066f08beec538e775443c5be79dd423fcabahrens * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * If applicable, add the following below this CDDL HEADER, with the
fa9e4066f08beec538e775443c5be79dd423fcabahrens * fields enclosed by brackets "[]" replaced with your own identifying
fa9e4066f08beec538e775443c5be79dd423fcabahrens * information: Portions Copyright [yyyy] [name of copyright owner]
fa9e4066f08beec538e775443c5be79dd423fcabahrens *
fa9e4066f08beec538e775443c5be79dd423fcabahrens * CDDL HEADER END
fa9e4066f08beec538e775443c5be79dd423fcabahrens */
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Use is subject to license terms.
fa9e4066f08beec538e775443c5be79dd423fcabahrens */
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens#pragma ident "%Z%%M% %I% %E% SMI"
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens#include "libzfs_jni_pool.h"
fa9e4066f08beec538e775443c5be79dd423fcabahrens#include "libzfs_jni_util.h"
fa9e4066f08beec538e775443c5be79dd423fcabahrens#include <strings.h>
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Types
fa9e4066f08beec538e775443c5be79dd423fcabahrens */
fa9e4066f08beec538e775443c5be79dd423fcabahrens
c8e9ed14d97e244b9753db14caf8481f181f5750talleytypedef struct ImportablePoolBean {
c8e9ed14d97e244b9753db14caf8481f181f5750talley zjni_Object_t super;
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley jmethodID method_setName;
c8e9ed14d97e244b9753db14caf8481f181f5750talley jmethodID method_setId;
c8e9ed14d97e244b9753db14caf8481f181f5750talley jmethodID method_setState;
c8e9ed14d97e244b9753db14caf8481f181f5750talley jmethodID method_setHealth;
c8e9ed14d97e244b9753db14caf8481f181f5750talley} ImportablePoolBean_t;
c8e9ed14d97e244b9753db14caf8481f181f5750talley
fa9e4066f08beec538e775443c5be79dd423fcabahrenstypedef struct VirtualDeviceBean {
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_Object_t super;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID method_setPoolName;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID method_setIndex;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID method_setSize;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID method_setUsed;
fa9e4066f08beec538e775443c5be79dd423fcabahrens} VirtualDeviceBean_t;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrenstypedef struct DiskVirtualDeviceBean {
fa9e4066f08beec538e775443c5be79dd423fcabahrens VirtualDeviceBean_t super;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID method_setDiskName;
fa9e4066f08beec538e775443c5be79dd423fcabahrens} DiskVirtualDeviceBean_t;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrenstypedef struct FileVirtualDeviceBean {
fa9e4066f08beec538e775443c5be79dd423fcabahrens VirtualDeviceBean_t super;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID method_setFileName;
fa9e4066f08beec538e775443c5be79dd423fcabahrens} FileVirtualDeviceBean_t;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrenstypedef struct RAIDVirtualDeviceBean {
fa9e4066f08beec538e775443c5be79dd423fcabahrens VirtualDeviceBean_t super;
fa9e4066f08beec538e775443c5be79dd423fcabahrens} RAIDVirtualDeviceBean_t;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrenstypedef struct MirrorVirtualDeviceBean {
fa9e4066f08beec538e775443c5be79dd423fcabahrens VirtualDeviceBean_t super;
fa9e4066f08beec538e775443c5be79dd423fcabahrens} MirrorVirtualDeviceBean_t;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Function prototypes
fa9e4066f08beec538e775443c5be79dd423fcabahrens */
fa9e4066f08beec538e775443c5be79dd423fcabahrens
c8e9ed14d97e244b9753db14caf8481f181f5750talleystatic void new_ImportablePoolBean(JNIEnv *, ImportablePoolBean_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic void new_VirtualDevice(JNIEnv *, VirtualDeviceBean_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic void new_DiskVirtualDeviceBean(JNIEnv *, DiskVirtualDeviceBean_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic void new_FileVirtualDeviceBean(JNIEnv *, FileVirtualDeviceBean_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic void new_RAIDVirtualDeviceBean(JNIEnv *, RAIDVirtualDeviceBean_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic void new_MirrorVirtualDeviceBean(JNIEnv *, MirrorVirtualDeviceBean_t *);
c8e9ed14d97e244b9753db14caf8481f181f5750talleystatic jobject uint64_to_state(JNIEnv *, uint64_t);
c8e9ed14d97e244b9753db14caf8481f181f5750talleystatic int populate_ImportablePoolBean(
c8e9ed14d97e244b9753db14caf8481f181f5750talley JNIEnv *, ImportablePoolBean_t *, char *, uint64_t, uint64_t, char *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic int populate_VirtualDeviceBean(
fa9e4066f08beec538e775443c5be79dd423fcabahrens JNIEnv *, zpool_handle_t *, nvlist_t *, VirtualDeviceBean_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic int populate_DiskVirtualDeviceBean(
fa9e4066f08beec538e775443c5be79dd423fcabahrens JNIEnv *, zpool_handle_t *, nvlist_t *, DiskVirtualDeviceBean_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic int populate_FileVirtualDeviceBean(
fa9e4066f08beec538e775443c5be79dd423fcabahrens JNIEnv *, zpool_handle_t *, nvlist_t *, FileVirtualDeviceBean_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic int populate_RAIDVirtualDeviceBean(
fa9e4066f08beec538e775443c5be79dd423fcabahrens JNIEnv *, zpool_handle_t *, nvlist_t *, RAIDVirtualDeviceBean_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic int populate_MirrorVirtualDeviceBean(
fa9e4066f08beec538e775443c5be79dd423fcabahrens JNIEnv *, zpool_handle_t *, nvlist_t *, MirrorVirtualDeviceBean_t *);
c8e9ed14d97e244b9753db14caf8481f181f5750talleystatic jobject create_ImportablePoolBean(
c8e9ed14d97e244b9753db14caf8481f181f5750talley JNIEnv *, char *, uint64_t, uint64_t, char *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_DiskVirtualDeviceBean(
fa9e4066f08beec538e775443c5be79dd423fcabahrens JNIEnv *, zpool_handle_t *, nvlist_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_FileVirtualDeviceBean(
fa9e4066f08beec538e775443c5be79dd423fcabahrens JNIEnv *, zpool_handle_t *, nvlist_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_RAIDVirtualDeviceBean(
fa9e4066f08beec538e775443c5be79dd423fcabahrens JNIEnv *, zpool_handle_t *, nvlist_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_MirrorVirtualDeviceBean(
fa9e4066f08beec538e775443c5be79dd423fcabahrens JNIEnv *, zpool_handle_t *, nvlist_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Static functions
fa9e4066f08beec538e775443c5be79dd423fcabahrens */
fa9e4066f08beec538e775443c5be79dd423fcabahrens
c8e9ed14d97e244b9753db14caf8481f181f5750talley/* Create a ImportablePoolBean */
c8e9ed14d97e244b9753db14caf8481f181f5750talleystatic void
c8e9ed14d97e244b9753db14caf8481f181f5750talleynew_ImportablePoolBean(JNIEnv *env, ImportablePoolBean_t *bean)
c8e9ed14d97e244b9753db14caf8481f181f5750talley{
c8e9ed14d97e244b9753db14caf8481f181f5750talley zjni_Object_t *object = (zjni_Object_t *)bean;
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley if (object->object == NULL) {
c8e9ed14d97e244b9753db14caf8481f181f5750talley object->class =
c8e9ed14d97e244b9753db14caf8481f181f5750talley (*env)->FindClass(env,
c8e9ed14d97e244b9753db14caf8481f181f5750talley ZFSJNI_PACKAGE_DATA "ImportablePoolBean");
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley object->constructor =
c8e9ed14d97e244b9753db14caf8481f181f5750talley (*env)->GetMethodID(env, object->class, "<init>", "()V");
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley object->object =
c8e9ed14d97e244b9753db14caf8481f181f5750talley (*env)->NewObject(env, object->class, object->constructor);
c8e9ed14d97e244b9753db14caf8481f181f5750talley }
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley bean->method_setName = (*env)->GetMethodID(
c8e9ed14d97e244b9753db14caf8481f181f5750talley env, object->class, "setName", "(Ljava/lang/String;)V");
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley bean->method_setId = (*env)->GetMethodID(
c8e9ed14d97e244b9753db14caf8481f181f5750talley env, object->class, "setId", "(J)V");
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley bean->method_setState = (*env)->GetMethodID(
c8e9ed14d97e244b9753db14caf8481f181f5750talley env, object->class, "setState",
c8e9ed14d97e244b9753db14caf8481f181f5750talley "(L" ZFSJNI_PACKAGE_DATA "ImportablePool$State;)V");
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley bean->method_setHealth = (*env)->GetMethodID(
c8e9ed14d97e244b9753db14caf8481f181f5750talley env, object->class, "setHealth", "(Ljava/lang/String;)V");
c8e9ed14d97e244b9753db14caf8481f181f5750talley}
c8e9ed14d97e244b9753db14caf8481f181f5750talley
fa9e4066f08beec538e775443c5be79dd423fcabahrens/* Create a VirtualDeviceBean */
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic void
fa9e4066f08beec538e775443c5be79dd423fcabahrensnew_VirtualDevice(JNIEnv *env, VirtualDeviceBean_t *bean)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_Object_t *object = (zjni_Object_t *)bean;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (object->object == NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens object->class =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->FindClass(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "VirtualDeviceBean");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens object->constructor =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->GetMethodID(env, object->class, "<init>", "()V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens object->object =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->NewObject(env, object->class, object->constructor);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens bean->method_setPoolName = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, object->class, "setPoolName", "(Ljava/lang/String;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens bean->method_setIndex = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, object->class, "setIndex", "(J)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens bean->method_setSize = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, object->class, "setSize", "(J)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens bean->method_setUsed = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, object->class, "setUsed", "(J)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens/* Create a DiskVirtualDeviceBean */
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic void
fa9e4066f08beec538e775443c5be79dd423fcabahrensnew_DiskVirtualDeviceBean(JNIEnv *env, DiskVirtualDeviceBean_t *bean)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_Object_t *object = (zjni_Object_t *)bean;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (object->object == NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens object->class = (*env)->FindClass(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ZFSJNI_PACKAGE_DATA "DiskVirtualDeviceBean");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens object->constructor =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->GetMethodID(env, object->class, "<init>", "()V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens object->object =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->NewObject(env, object->class, object->constructor);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens new_VirtualDevice(env, (VirtualDeviceBean_t *)bean);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens bean->method_setDiskName = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, object->class, "setDiskName", "(Ljava/lang/String;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens/* Create a FileVirtualDeviceBean */
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic void
fa9e4066f08beec538e775443c5be79dd423fcabahrensnew_FileVirtualDeviceBean(JNIEnv *env, FileVirtualDeviceBean_t *bean)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_Object_t *object = (zjni_Object_t *)bean;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (object->object == NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens object->class = (*env)->FindClass(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ZFSJNI_PACKAGE_DATA "FileVirtualDeviceBean");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens object->constructor =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->GetMethodID(env, object->class, "<init>", "()V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens object->object =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->NewObject(env, object->class, object->constructor);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens new_VirtualDevice(env, (VirtualDeviceBean_t *)bean);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens bean->method_setFileName = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, object->class, "setFileName", "(Ljava/lang/String;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens/* Create a RAIDVirtualDeviceBean */
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic void
fa9e4066f08beec538e775443c5be79dd423fcabahrensnew_RAIDVirtualDeviceBean(JNIEnv *env, RAIDVirtualDeviceBean_t *bean)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_Object_t *object = (zjni_Object_t *)bean;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (object->object == NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens object->class = (*env)->FindClass(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ZFSJNI_PACKAGE_DATA "RAIDVirtualDeviceBean");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens object->constructor =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->GetMethodID(env, object->class, "<init>", "()V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens object->object =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->NewObject(env, object->class, object->constructor);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens new_VirtualDevice(env, (VirtualDeviceBean_t *)bean);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens/* Create a MirrorVirtualDeviceBean */
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic void
fa9e4066f08beec538e775443c5be79dd423fcabahrensnew_MirrorVirtualDeviceBean(JNIEnv *env, MirrorVirtualDeviceBean_t *bean)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_Object_t *object = (zjni_Object_t *)bean;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (object->object == NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens object->class = (*env)->FindClass(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ZFSJNI_PACKAGE_DATA "MirrorVirtualDeviceBean");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens object->constructor =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->GetMethodID(env, object->class, "<init>", "()V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens object->object =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->NewObject(env, object->class, object->constructor);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens new_VirtualDevice(env, (VirtualDeviceBean_t *)bean);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
c8e9ed14d97e244b9753db14caf8481f181f5750talleystatic jobject
c8e9ed14d97e244b9753db14caf8481f181f5750talleyuint64_to_state(JNIEnv *env, uint64_t pool_state)
c8e9ed14d97e244b9753db14caf8481f181f5750talley{
c8e9ed14d97e244b9753db14caf8481f181f5750talley jobject state_obj;
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley jclass class_State = (*env)->FindClass(
c8e9ed14d97e244b9753db14caf8481f181f5750talley env, ZFSJNI_PACKAGE_DATA "ImportablePool$State");
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley jmethodID method_valueOf = (*env)->GetStaticMethodID(
c8e9ed14d97e244b9753db14caf8481f181f5750talley env, class_State, "valueOf",
c8e9ed14d97e244b9753db14caf8481f181f5750talley "(Ljava/lang/String;)L"
c8e9ed14d97e244b9753db14caf8481f181f5750talley ZFSJNI_PACKAGE_DATA "ImportablePool$State;");
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley char *str = zjni_get_state_str(pool_state);
c8e9ed14d97e244b9753db14caf8481f181f5750talley if (str != NULL) {
c8e9ed14d97e244b9753db14caf8481f181f5750talley jstring utf = (*env)->NewStringUTF(env, str);
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley state_obj = (*env)->CallStaticObjectMethod(
c8e9ed14d97e244b9753db14caf8481f181f5750talley env, class_State, method_valueOf, utf);
c8e9ed14d97e244b9753db14caf8481f181f5750talley }
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley return (state_obj);
c8e9ed14d97e244b9753db14caf8481f181f5750talley}
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talleystatic int
c8e9ed14d97e244b9753db14caf8481f181f5750talleypopulate_ImportablePoolBean(JNIEnv *env, ImportablePoolBean_t *bean,
c8e9ed14d97e244b9753db14caf8481f181f5750talley char *name, uint64_t guid, uint64_t pool_state, char *health)
c8e9ed14d97e244b9753db14caf8481f181f5750talley{
c8e9ed14d97e244b9753db14caf8481f181f5750talley zjni_Object_t *object = (zjni_Object_t *)bean;
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley /* Set name */
c8e9ed14d97e244b9753db14caf8481f181f5750talley (*env)->CallVoidMethod(env, object->object, bean->method_setName,
c8e9ed14d97e244b9753db14caf8481f181f5750talley (*env)->NewStringUTF(env, name));
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley /* Set state */
c8e9ed14d97e244b9753db14caf8481f181f5750talley (*env)->CallVoidMethod(
c8e9ed14d97e244b9753db14caf8481f181f5750talley env, object->object, bean->method_setState,
c8e9ed14d97e244b9753db14caf8481f181f5750talley uint64_to_state(env, pool_state));
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley /* Set guid */
c8e9ed14d97e244b9753db14caf8481f181f5750talley (*env)->CallVoidMethod(
c8e9ed14d97e244b9753db14caf8481f181f5750talley env, object->object, bean->method_setId, (jlong)guid);
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley /* Set health */
c8e9ed14d97e244b9753db14caf8481f181f5750talley (*env)->CallVoidMethod(env, object->object, bean->method_setHealth,
c8e9ed14d97e244b9753db14caf8481f181f5750talley (*env)->NewStringUTF(env, health));
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley return (0);
c8e9ed14d97e244b9753db14caf8481f181f5750talley}
c8e9ed14d97e244b9753db14caf8481f181f5750talley
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic int
fa9e4066f08beec538e775443c5be79dd423fcabahrenspopulate_VirtualDeviceBean(JNIEnv *env, zpool_handle_t *zhp,
fa9e4066f08beec538e775443c5be79dd423fcabahrens nvlist_t *vdev, VirtualDeviceBean_t *bean)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result;
fa9e4066f08beec538e775443c5be79dd423fcabahrens uint64_t vdev_id;
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_Object_t *object = (zjni_Object_t *)bean;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Set pool name */
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring poolUTF = (*env)->NewStringUTF(env, zpool_get_name(zhp));
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->CallVoidMethod(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, object->object, bean->method_setPoolName, poolUTF);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Get index */
fa9e4066f08beec538e775443c5be79dd423fcabahrens result = nvlist_lookup_uint64(vdev, ZPOOL_CONFIG_GUID, &vdev_id);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result != 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_throw_exception(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens "could not retrieve virtual device ID (pool %s)",
fa9e4066f08beec538e775443c5be79dd423fcabahrens zpool_get_name(zhp));
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens uint64_t used;
fa9e4066f08beec538e775443c5be79dd423fcabahrens uint64_t total;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->CallVoidMethod(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, object->object, bean->method_setIndex, (jlong)vdev_id);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Set used space */
fa9e4066f08beec538e775443c5be79dd423fcabahrens used = zpool_get_space_used(zhp);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->CallVoidMethod(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, object->object, bean->method_setUsed, (jlong)used);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Set available space */
fa9e4066f08beec538e775443c5be79dd423fcabahrens total = zpool_get_space_total(zhp);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->CallVoidMethod(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, object->object, bean->method_setSize, (jlong)total);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (result != 0);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic int
fa9e4066f08beec538e775443c5be79dd423fcabahrenspopulate_DiskVirtualDeviceBean(JNIEnv *env, zpool_handle_t *zhp,
fa9e4066f08beec538e775443c5be79dd423fcabahrens nvlist_t *vdev, DiskVirtualDeviceBean_t *bean)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens char *path;
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result = populate_VirtualDeviceBean(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, zhp, vdev, (VirtualDeviceBean_t *)bean);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Must not call any more Java methods to preserve exception */
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (-1);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Set path */
fa9e4066f08beec538e775443c5be79dd423fcabahrens result = nvlist_lookup_string(vdev, ZPOOL_CONFIG_PATH, &path);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result != 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_throw_exception(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens "could not retrive path from disk virtual device (pool %s)",
fa9e4066f08beec538e775443c5be79dd423fcabahrens zpool_get_name(zhp));
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring pathUTF = (*env)->NewStringUTF(env, path);
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->CallVoidMethod(env, ((zjni_Object_t *)bean)->object,
fa9e4066f08beec538e775443c5be79dd423fcabahrens bean->method_setDiskName, pathUTF);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (result != 0);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic int
fa9e4066f08beec538e775443c5be79dd423fcabahrenspopulate_FileVirtualDeviceBean(JNIEnv *env, zpool_handle_t *zhp,
fa9e4066f08beec538e775443c5be79dd423fcabahrens nvlist_t *vdev, FileVirtualDeviceBean_t *bean)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens char *path;
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result = populate_VirtualDeviceBean(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, zhp, vdev, (VirtualDeviceBean_t *)bean);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Must not call any more Java methods to preserve exception */
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (-1);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Set path */
fa9e4066f08beec538e775443c5be79dd423fcabahrens result = nvlist_lookup_string(vdev, ZPOOL_CONFIG_PATH, &path);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result != 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_throw_exception(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens "could not retrive path from disk virtual device (pool %s)",
fa9e4066f08beec538e775443c5be79dd423fcabahrens zpool_get_name(zhp));
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring pathUTF = (*env)->NewStringUTF(env, path);
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->CallVoidMethod(env, ((zjni_Object_t *)bean)->object,
fa9e4066f08beec538e775443c5be79dd423fcabahrens bean->method_setFileName, pathUTF);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (result != 0);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic int
fa9e4066f08beec538e775443c5be79dd423fcabahrenspopulate_RAIDVirtualDeviceBean(JNIEnv *env, zpool_handle_t *zhp,
fa9e4066f08beec538e775443c5be79dd423fcabahrens nvlist_t *vdev, RAIDVirtualDeviceBean_t *bean)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (populate_VirtualDeviceBean(env, zhp, vdev,
fa9e4066f08beec538e775443c5be79dd423fcabahrens (VirtualDeviceBean_t *)bean));
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic int
fa9e4066f08beec538e775443c5be79dd423fcabahrenspopulate_MirrorVirtualDeviceBean(JNIEnv *env, zpool_handle_t *zhp,
fa9e4066f08beec538e775443c5be79dd423fcabahrens nvlist_t *vdev, MirrorVirtualDeviceBean_t *bean)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (populate_VirtualDeviceBean(env, zhp, vdev,
fa9e4066f08beec538e775443c5be79dd423fcabahrens (VirtualDeviceBean_t *)bean));
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
c8e9ed14d97e244b9753db14caf8481f181f5750talleystatic jobject
c8e9ed14d97e244b9753db14caf8481f181f5750talleycreate_ImportablePoolBean(JNIEnv *env, char *name,
c8e9ed14d97e244b9753db14caf8481f181f5750talley uint64_t guid, uint64_t pool_state, char *health)
c8e9ed14d97e244b9753db14caf8481f181f5750talley{
c8e9ed14d97e244b9753db14caf8481f181f5750talley int result;
c8e9ed14d97e244b9753db14caf8481f181f5750talley ImportablePoolBean_t bean_obj = {0};
c8e9ed14d97e244b9753db14caf8481f181f5750talley ImportablePoolBean_t *bean = &bean_obj;
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley /* Construct ImportablePoolBean */
c8e9ed14d97e244b9753db14caf8481f181f5750talley new_ImportablePoolBean(env, bean);
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley result = populate_ImportablePoolBean(
c8e9ed14d97e244b9753db14caf8481f181f5750talley env, bean, name, guid, pool_state, health);
c8e9ed14d97e244b9753db14caf8481f181f5750talley if (result) {
c8e9ed14d97e244b9753db14caf8481f181f5750talley /* Must not call any more Java methods to preserve exception */
c8e9ed14d97e244b9753db14caf8481f181f5750talley return (NULL);
c8e9ed14d97e244b9753db14caf8481f181f5750talley }
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley return (((zjni_Object_t *)bean)->object);
c8e9ed14d97e244b9753db14caf8481f181f5750talley}
c8e9ed14d97e244b9753db14caf8481f181f5750talley
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_DiskVirtualDeviceBean(JNIEnv *env, zpool_handle_t *zhp, nvlist_t *vdev)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result;
fa9e4066f08beec538e775443c5be79dd423fcabahrens DiskVirtualDeviceBean_t bean_obj = {0};
fa9e4066f08beec538e775443c5be79dd423fcabahrens DiskVirtualDeviceBean_t *bean = &bean_obj;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Construct DiskVirtualDeviceBean */
fa9e4066f08beec538e775443c5be79dd423fcabahrens new_DiskVirtualDeviceBean(env, bean);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens result = populate_DiskVirtualDeviceBean(env, zhp, vdev, bean);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Must not call any more Java methods to preserve exception */
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (NULL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (((zjni_Object_t *)bean)->object);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_FileVirtualDeviceBean(JNIEnv *env, zpool_handle_t *zhp, nvlist_t *vdev)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result;
fa9e4066f08beec538e775443c5be79dd423fcabahrens FileVirtualDeviceBean_t bean_obj = {0};
fa9e4066f08beec538e775443c5be79dd423fcabahrens FileVirtualDeviceBean_t *bean = &bean_obj;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Construct FileVirtualDeviceBean */
fa9e4066f08beec538e775443c5be79dd423fcabahrens new_FileVirtualDeviceBean(env, bean);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens result = populate_FileVirtualDeviceBean(env, zhp, vdev, bean);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Must not call any more Java methods to preserve exception */
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (NULL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (((zjni_Object_t *)bean)->object);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_RAIDVirtualDeviceBean(JNIEnv *env, zpool_handle_t *zhp, nvlist_t *vdev)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result;
fa9e4066f08beec538e775443c5be79dd423fcabahrens RAIDVirtualDeviceBean_t bean_obj = {0};
fa9e4066f08beec538e775443c5be79dd423fcabahrens RAIDVirtualDeviceBean_t *bean = &bean_obj;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens ((zjni_Object_t *)bean)->object = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Construct RAIDVirtualDeviceBean */
fa9e4066f08beec538e775443c5be79dd423fcabahrens new_RAIDVirtualDeviceBean(env, bean);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens result = populate_RAIDVirtualDeviceBean(env, zhp, vdev, bean);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Must not call any more Java methods to preserve exception */
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (NULL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (((zjni_Object_t *)bean)->object);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_MirrorVirtualDeviceBean(JNIEnv *env, zpool_handle_t *zhp, nvlist_t *vdev)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result;
fa9e4066f08beec538e775443c5be79dd423fcabahrens MirrorVirtualDeviceBean_t bean_obj = {0};
fa9e4066f08beec538e775443c5be79dd423fcabahrens MirrorVirtualDeviceBean_t *bean = &bean_obj;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Construct MirrorVirtualDeviceBean */
fa9e4066f08beec538e775443c5be79dd423fcabahrens new_MirrorVirtualDeviceBean(env, bean);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens result = populate_MirrorVirtualDeviceBean(env, zhp, vdev, bean);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Must not call any more Java methods to preserve exception */
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (NULL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (((zjni_Object_t *)bean)->object);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Package-private functions
fa9e4066f08beec538e775443c5be79dd423fcabahrens */
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Gets the root vdev (an nvlist_t *) for the given pool.
fa9e4066f08beec538e775443c5be79dd423fcabahrens */
fa9e4066f08beec538e775443c5be79dd423fcabahrensnvlist_t *
fa9e4066f08beec538e775443c5be79dd423fcabahrenszjni_get_root_vdev(zpool_handle_t *zhp)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens nvlist_t *root = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (zhp != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens nvlist_t *attrs = zpool_get_config(zhp);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (attrs != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result = nvlist_lookup_nvlist(
fa9e4066f08beec538e775443c5be79dd423fcabahrens attrs, ZPOOL_CONFIG_VDEV_TREE, &root);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result != 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens root = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (root);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Gets the vdev (an nvlist_t *) with the given vdev_id, below the
fa9e4066f08beec538e775443c5be79dd423fcabahrens * given vdev. If the given vdev is NULL, all vdevs within the given
fa9e4066f08beec538e775443c5be79dd423fcabahrens * pool are searched.
fa9e4066f08beec538e775443c5be79dd423fcabahrens */
fa9e4066f08beec538e775443c5be79dd423fcabahrensnvlist_t *
fa9e4066f08beec538e775443c5be79dd423fcabahrenszjni_get_vdev(zpool_handle_t *zhp, nvlist_t *vdev_parent,
fa9e4066f08beec538e775443c5be79dd423fcabahrens uint64_t vdev_id_to_find)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Was a vdev specified? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (vdev_parent == NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* No -- retrieve the top-level pool vdev */
fa9e4066f08beec538e775443c5be79dd423fcabahrens vdev_parent = zjni_get_root_vdev(zhp);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Get index of this vdev and compare with vdev_id_to_find */
fa9e4066f08beec538e775443c5be79dd423fcabahrens uint64_t id;
fa9e4066f08beec538e775443c5be79dd423fcabahrens result = nvlist_lookup_uint64(
fa9e4066f08beec538e775443c5be79dd423fcabahrens vdev_parent, ZPOOL_CONFIG_GUID, &id);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0 && id == vdev_id_to_find) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (vdev_parent);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (vdev_parent != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens nvlist_t **children;
fa9e4066f08beec538e775443c5be79dd423fcabahrens uint_t nelem = 0;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Get the vdevs under this vdev */
fa9e4066f08beec538e775443c5be79dd423fcabahrens result = nvlist_lookup_nvlist_array(
fa9e4066f08beec538e775443c5be79dd423fcabahrens vdev_parent, ZPOOL_CONFIG_CHILDREN, &children, &nelem);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens int i;
fa9e4066f08beec538e775443c5be79dd423fcabahrens nvlist_t *child;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* For each vdev child... */
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (i = 0; i < nelem; i++) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens child = zjni_get_vdev(zhp, children[i],
fa9e4066f08beec538e775443c5be79dd423fcabahrens vdev_id_to_find);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (child != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (child);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (NULL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensjobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenszjni_get_VirtualDevice_from_vdev(JNIEnv *env, zpool_handle_t *zhp,
fa9e4066f08beec538e775443c5be79dd423fcabahrens nvlist_t *vdev)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject obj = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens char *type = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result = nvlist_lookup_string(vdev, ZPOOL_CONFIG_TYPE, &type);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (strcmp(type, VDEV_TYPE_DISK) == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens obj = create_DiskVirtualDeviceBean(env, zhp, vdev);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else if (strcmp(type, VDEV_TYPE_FILE) == 0) {
c8e9ed14d97e244b9753db14caf8481f181f5750talley obj = create_FileVirtualDeviceBean(env, zhp, vdev);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else if (strcmp(type, VDEV_TYPE_RAIDZ) == 0) {
c8e9ed14d97e244b9753db14caf8481f181f5750talley obj = create_RAIDVirtualDeviceBean(env, zhp, vdev);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else if (strcmp(type, VDEV_TYPE_MIRROR) == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens obj = create_MirrorVirtualDeviceBean(env, zhp, vdev);
c8e9ed14d97e244b9753db14caf8481f181f5750talley } else if (strcmp(type, VDEV_TYPE_REPLACING) == 0) {
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley /* Get the vdevs under this vdev */
c8e9ed14d97e244b9753db14caf8481f181f5750talley nvlist_t **children;
c8e9ed14d97e244b9753db14caf8481f181f5750talley uint_t nelem = 0;
c8e9ed14d97e244b9753db14caf8481f181f5750talley int result = nvlist_lookup_nvlist_array(
c8e9ed14d97e244b9753db14caf8481f181f5750talley vdev, ZPOOL_CONFIG_CHILDREN, &children, &nelem);
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley if (result == 0 && nelem > 0) {
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley /* Get last vdev child (replacement device) */
c8e9ed14d97e244b9753db14caf8481f181f5750talley nvlist_t *child = children[nelem - 1];
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley obj = zjni_get_VirtualDevice_from_vdev(env,
c8e9ed14d97e244b9753db14caf8481f181f5750talley zhp, child);
c8e9ed14d97e244b9753db14caf8481f181f5750talley }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (obj);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensjobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenszjni_get_VirtualDevices_from_vdev(JNIEnv *env, zpool_handle_t *zhp,
fa9e4066f08beec538e775443c5be79dd423fcabahrens nvlist_t *vdev_parent)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Create an array list for the vdevs */
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_ArrayList_t list_class = {0};
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_ArrayList_t *list_class_p = &list_class;
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_new_ArrayList(env, list_class_p);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Was a vdev specified? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (vdev_parent == NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* No -- retrieve the top-level pool vdev */
fa9e4066f08beec538e775443c5be79dd423fcabahrens vdev_parent = zjni_get_root_vdev(zhp);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (vdev_parent != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Get the vdevs under this vdev */
fa9e4066f08beec538e775443c5be79dd423fcabahrens nvlist_t **children;
fa9e4066f08beec538e775443c5be79dd423fcabahrens uint_t nelem = 0;
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result = nvlist_lookup_nvlist_array(
fa9e4066f08beec538e775443c5be79dd423fcabahrens vdev_parent, ZPOOL_CONFIG_CHILDREN, &children, &nelem);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* For each vdev child... */
fa9e4066f08beec538e775443c5be79dd423fcabahrens int i;
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (i = 0; i < nelem; i++) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens nvlist_t *child = children[i];
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Create a Java object from this vdev */
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject obj =
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_get_VirtualDevice_from_vdev(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens zhp, child);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
c8e9ed14d97e244b9753db14caf8481f181f5750talley if ((*env)->ExceptionOccurred(env) != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /*
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Must not call any more Java methods
fa9e4066f08beec538e775443c5be79dd423fcabahrens * to preserve exception
fa9e4066f08beec538e775443c5be79dd423fcabahrens */
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (NULL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
c8e9ed14d97e244b9753db14caf8481f181f5750talley if (obj != NULL) {
c8e9ed14d97e244b9753db14caf8481f181f5750talley /* Add child to child vdev list */
c8e9ed14d97e244b9753db14caf8481f181f5750talley (*env)->CallBooleanMethod(env,
c8e9ed14d97e244b9753db14caf8481f181f5750talley ((zjni_Object_t *)list_class_p)->object,
c8e9ed14d97e244b9753db14caf8481f181f5750talley ((zjni_Collection_t *)list_class_p)->
c8e9ed14d97e244b9753db14caf8481f181f5750talley method_add, obj);
c8e9ed14d97e244b9753db14caf8481f181f5750talley }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (zjni_Collection_to_array(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, (zjni_Collection_t *)list_class_p,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "VirtualDevice"));
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talleyint
c8e9ed14d97e244b9753db14caf8481f181f5750talleyzjni_create_add_ImportablePool(char *name,
c8e9ed14d97e244b9753db14caf8481f181f5750talley uint64_t guid, uint64_t pool_state, char *health, void *data) {
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley JNIEnv *env = ((zjni_ArrayCallbackData_t *)data)->env;
c8e9ed14d97e244b9753db14caf8481f181f5750talley zjni_Collection_t *list = ((zjni_ArrayCallbackData_t *)data)->list;
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley /* Construct ImportablePool object */
c8e9ed14d97e244b9753db14caf8481f181f5750talley jobject bean = create_ImportablePoolBean(
c8e9ed14d97e244b9753db14caf8481f181f5750talley env, name, guid, pool_state, health);
c8e9ed14d97e244b9753db14caf8481f181f5750talley if (bean == NULL) {
c8e9ed14d97e244b9753db14caf8481f181f5750talley return (-1);
c8e9ed14d97e244b9753db14caf8481f181f5750talley }
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley /* Add bean to list */
c8e9ed14d97e244b9753db14caf8481f181f5750talley (*env)->CallBooleanMethod(env, ((zjni_Object_t *)list)->object,
c8e9ed14d97e244b9753db14caf8481f181f5750talley ((zjni_Collection_t *)list)->method_add, bean);
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley return (0);
c8e9ed14d97e244b9753db14caf8481f181f5750talley}
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley/*
c8e9ed14d97e244b9753db14caf8481f181f5750talley * Extern functions
c8e9ed14d97e244b9753db14caf8481f181f5750talley */
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley/*
c8e9ed14d97e244b9753db14caf8481f181f5750talley * Iterates through each importable pool on the system. For each
c8e9ed14d97e244b9753db14caf8481f181f5750talley * importable pool, runs the given function with the given void as the
c8e9ed14d97e244b9753db14caf8481f181f5750talley * last arg.
c8e9ed14d97e244b9753db14caf8481f181f5750talley */
c8e9ed14d97e244b9753db14caf8481f181f5750talleyint
c8e9ed14d97e244b9753db14caf8481f181f5750talleyzjni_ipool_iter(int argc, char **argv, zjni_ipool_iter_f func, void *data)
c8e9ed14d97e244b9753db14caf8481f181f5750talley{
c8e9ed14d97e244b9753db14caf8481f181f5750talley nvlist_t *pools = zpool_find_import(argc, argv);
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley if (pools != NULL) {
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley nvpair_t *elem = NULL;
c8e9ed14d97e244b9753db14caf8481f181f5750talley while ((elem = nvlist_next_nvpair(pools, elem)) != NULL) {
c8e9ed14d97e244b9753db14caf8481f181f5750talley nvlist_t *config;
c8e9ed14d97e244b9753db14caf8481f181f5750talley char *name;
c8e9ed14d97e244b9753db14caf8481f181f5750talley uint64_t guid;
c8e9ed14d97e244b9753db14caf8481f181f5750talley uint64_t pool_state;
c8e9ed14d97e244b9753db14caf8481f181f5750talley char *health;
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley if (nvpair_value_nvlist(elem, &config) != 0 ||
c8e9ed14d97e244b9753db14caf8481f181f5750talley nvlist_lookup_string(config,
c8e9ed14d97e244b9753db14caf8481f181f5750talley ZPOOL_CONFIG_POOL_NAME, &name) != 0 ||
c8e9ed14d97e244b9753db14caf8481f181f5750talley nvlist_lookup_uint64(config,
c8e9ed14d97e244b9753db14caf8481f181f5750talley ZPOOL_CONFIG_POOL_GUID, &guid) != 0 ||
c8e9ed14d97e244b9753db14caf8481f181f5750talley nvlist_lookup_uint64(config,
c8e9ed14d97e244b9753db14caf8481f181f5750talley ZPOOL_CONFIG_POOL_STATE, &pool_state) != 0 ||
c8e9ed14d97e244b9753db14caf8481f181f5750talley nvlist_lookup_string(config,
c8e9ed14d97e244b9753db14caf8481f181f5750talley ZPOOL_CONFIG_POOL_HEALTH, &health) != 0) {
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley return (-1);
c8e9ed14d97e244b9753db14caf8481f181f5750talley }
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley /* Run the given function */
c8e9ed14d97e244b9753db14caf8481f181f5750talley if (func(name, guid, pool_state, health, data)) {
c8e9ed14d97e244b9753db14caf8481f181f5750talley return (-1);
c8e9ed14d97e244b9753db14caf8481f181f5750talley }
c8e9ed14d97e244b9753db14caf8481f181f5750talley }
c8e9ed14d97e244b9753db14caf8481f181f5750talley }
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley return (0);
c8e9ed14d97e244b9753db14caf8481f181f5750talley}
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talleychar *
c8e9ed14d97e244b9753db14caf8481f181f5750talleyzjni_get_state_str(uint64_t pool_state)
c8e9ed14d97e244b9753db14caf8481f181f5750talley{
c8e9ed14d97e244b9753db14caf8481f181f5750talley char *str = NULL;
c8e9ed14d97e244b9753db14caf8481f181f5750talley switch (pool_state) {
c8e9ed14d97e244b9753db14caf8481f181f5750talley case POOL_STATE_ACTIVE:
c8e9ed14d97e244b9753db14caf8481f181f5750talley str = "POOL_STATE_ACTIVE";
c8e9ed14d97e244b9753db14caf8481f181f5750talley break;
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley case POOL_STATE_EXPORTED:
c8e9ed14d97e244b9753db14caf8481f181f5750talley str = "POOL_STATE_EXPORTED";
c8e9ed14d97e244b9753db14caf8481f181f5750talley break;
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley case POOL_STATE_DESTROYED:
c8e9ed14d97e244b9753db14caf8481f181f5750talley str = "POOL_STATE_DESTROYED";
c8e9ed14d97e244b9753db14caf8481f181f5750talley break;
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley case POOL_STATE_UNINITIALIZED:
c8e9ed14d97e244b9753db14caf8481f181f5750talley str = "POOL_STATE_UNINITIALIZED";
c8e9ed14d97e244b9753db14caf8481f181f5750talley break;
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley case POOL_STATE_UNAVAIL:
c8e9ed14d97e244b9753db14caf8481f181f5750talley str = "POOL_STATE_UNAVAIL";
c8e9ed14d97e244b9753db14caf8481f181f5750talley break;
c8e9ed14d97e244b9753db14caf8481f181f5750talley }
c8e9ed14d97e244b9753db14caf8481f181f5750talley
c8e9ed14d97e244b9753db14caf8481f181f5750talley return (str);
c8e9ed14d97e244b9753db14caf8481f181f5750talley}