usr/src/uts/common/fs/zfs/vdev_mirror.c
changeset 2082 76b439ec3ac1
parent 1807 35c8b566d7af
child 2391 2fa3fd1db808
--- a/usr/src/uts/common/fs/zfs/vdev_mirror.c	Tue May 30 15:35:36 2006 -0700
+++ b/usr/src/uts/common/fs/zfs/vdev_mirror.c	Tue May 30 15:47:16 2006 -0700
@@ -85,6 +85,7 @@
 
 		for (c = 0; c < mm->mm_children; c++) {
 			mc = &mm->mm_child[c];
+
 			mc->mc_vd = vdev_lookup_top(spa, DVA_GET_VDEV(&dva[c]));
 			mc->mc_offset = DVA_GET_OFFSET(&dva[c]);
 		}
@@ -93,7 +94,8 @@
 
 		mm = kmem_zalloc(offsetof(mirror_map_t, mm_child[c]), KM_SLEEP);
 		mm->mm_children = c;
-		mm->mm_replacing = (vd->vdev_ops == &vdev_replacing_ops);
+		mm->mm_replacing = (vd->vdev_ops == &vdev_replacing_ops ||
+		    vd->vdev_ops == &vdev_spare_ops);
 		mm->mm_preferred = mm->mm_replacing ? 0 : spa_get_random(c);
 		mm->mm_root = B_FALSE;
 
@@ -477,3 +479,14 @@
 	VDEV_TYPE_REPLACING,	/* name of this vdev type */
 	B_FALSE			/* not a leaf vdev */
 };
+
+vdev_ops_t vdev_spare_ops = {
+	vdev_mirror_open,
+	vdev_mirror_close,
+	vdev_default_asize,
+	vdev_mirror_io_start,
+	vdev_mirror_io_done,
+	vdev_mirror_state_change,
+	VDEV_TYPE_SPARE,	/* name of this vdev type */
+	B_FALSE			/* not a leaf vdev */
+};