diff options
| author | rl193873 <none@none> | 2007-11-02 15:15:58 -0700 |
|---|---|---|
| committer | rl193873 <none@none> | 2007-11-02 15:15:58 -0700 |
| commit | 1e995cfce563729fbd612e2ee27dbbab4f50dbaa (patch) | |
| tree | 8a71ae5d895322fee71832042d6551ac8d65001b /usr/src | |
| parent | 8142c2b2a11acff39ec7e0576c566a751eb30ba6 (diff) | |
| download | illumos-joyent-1e995cfce563729fbd612e2ee27dbbab4f50dbaa.tar.gz | |
6492629 GUI: raidz2 (double-parity) unsupported
Diffstat (limited to 'usr/src')
| -rw-r--r-- | usr/src/lib/libzfs_jni/common/libzfs_jni_pool.c | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/usr/src/lib/libzfs_jni/common/libzfs_jni_pool.c b/usr/src/lib/libzfs_jni/common/libzfs_jni_pool.c index 35bcd0081b..1ab414ac3b 100644 --- a/usr/src/lib/libzfs_jni/common/libzfs_jni_pool.c +++ b/usr/src/lib/libzfs_jni/common/libzfs_jni_pool.c @@ -71,6 +71,8 @@ typedef struct FileVirtualDeviceBean { typedef struct RAIDVirtualDeviceBean { VirtualDeviceBean_t super; + + jmethodID method_setParity; } RAIDVirtualDeviceBean_t; typedef struct MirrorVirtualDeviceBean { @@ -196,7 +198,7 @@ new_ImportablePoolBean(JNIEnv *env, ImportablePoolBean_t *bean) if (object->object == NULL) { object->class = (*env)->FindClass(env, - ZFSJNI_PACKAGE_DATA "ImportablePoolBean"); + ZFSJNI_PACKAGE_DATA "ImportablePoolBean"); object->constructor = (*env)->GetMethodID(env, object->class, "<init>", "()V"); @@ -223,7 +225,7 @@ new_VirtualDevice(JNIEnv *env, VirtualDeviceBean_t *bean) if (object->object == NULL) { object->class = (*env)->FindClass(env, - ZFSJNI_PACKAGE_DATA "VirtualDeviceBean"); + ZFSJNI_PACKAGE_DATA "VirtualDeviceBean"); object->constructor = (*env)->GetMethodID(env, object->class, "<init>", "()V"); @@ -253,7 +255,7 @@ new_LeafVirtualDevice(JNIEnv *env, LeafVirtualDeviceBean_t *bean) if (object->object == NULL) { object->class = (*env)->FindClass(env, - ZFSJNI_PACKAGE_DATA "LeafVirtualDeviceBean"); + ZFSJNI_PACKAGE_DATA "LeafVirtualDeviceBean"); object->constructor = (*env)->GetMethodID(env, object->class, "<init>", "()V"); @@ -347,6 +349,9 @@ new_RAIDVirtualDeviceBean(JNIEnv *env, RAIDVirtualDeviceBean_t *bean) } new_VirtualDevice(env, (VirtualDeviceBean_t *)bean); + + bean->method_setParity = (*env)->GetMethodID( + env, object->class, "setParity", "(J)V"); } /* Create a MirrorVirtualDeviceBean */ @@ -502,7 +507,7 @@ populate_DiskVirtualDeviceBean(JNIEnv *env, zpool_handle_t *zhp, } if (pathUTF == NULL) { - pathUTF = (*env)->NewStringUTF(env, path); + pathUTF = (*env)->NewStringUTF(env, path); } (*env)->CallVoidMethod(env, ((zjni_Object_t *)bean)->object, @@ -674,6 +679,7 @@ create_RAIDVirtualDeviceBean(JNIEnv *env, zpool_handle_t *zhp, nvlist_t *vdev, uint64_t *p_vdev_id) { int result; + uint64_t parity; RAIDVirtualDeviceBean_t bean_obj = {0}; RAIDVirtualDeviceBean_t *bean = &bean_obj; @@ -682,6 +688,19 @@ create_RAIDVirtualDeviceBean(JNIEnv *env, zpool_handle_t *zhp, /* Construct RAIDVirtualDeviceBean */ new_RAIDVirtualDeviceBean(env, bean); + /* Set parity bit */ + result = nvlist_lookup_uint64(vdev, ZPOOL_CONFIG_NPARITY, + &parity); + if (result) { + /* Default to RAID-Z1 in case of error */ + parity = 1; + } + + (*env)->CallVoidMethod( + env, ((zjni_Object_t *)bean)->object, bean->method_setParity, + (jlong)parity); + + result = populate_RAIDVirtualDeviceBean( env, zhp, vdev, p_vdev_id, bean); if (result) { @@ -976,7 +995,7 @@ zjni_get_VirtualDevices_from_vdev(JNIEnv *env, zpool_handle_t *zhp, /* Create a Java object from this vdev */ jobject obj = zjni_get_VirtualDevice_from_vdev(env, - zhp, child, p_vdev_id); + zhp, child, p_vdev_id); if ((*env)->ExceptionOccurred(env) != NULL) { /* @@ -988,10 +1007,11 @@ zjni_get_VirtualDevices_from_vdev(JNIEnv *env, zpool_handle_t *zhp, if (obj != NULL) { /* Add child to child vdev list */ - (*env)->CallBooleanMethod(env, - ((zjni_Object_t *)list_class_p)->object, - ((zjni_Collection_t *)list_class_p)-> - method_add, obj); + (*env)->CallBooleanMethod(env, + ((zjni_Object_t *) + list_class_p)->object, + ((zjni_Collection_t *) + list_class_p)->method_add, obj); } } } |
