summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorrl193873 <none@none>2007-11-02 15:15:58 -0700
committerrl193873 <none@none>2007-11-02 15:15:58 -0700
commit1e995cfce563729fbd612e2ee27dbbab4f50dbaa (patch)
tree8a71ae5d895322fee71832042d6551ac8d65001b /usr/src
parent8142c2b2a11acff39ec7e0576c566a751eb30ba6 (diff)
downloadillumos-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.c38
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);
}
}
}