+static inline void __zio_execute(zio_t *zio);
+
+static int
+zio_cons(void *arg, void *unused, int kmflag)
+{
+ zio_t *zio = arg;
+
+ bzero(zio, sizeof (zio_t));
+
+ mutex_init(&zio->io_lock, NULL, MUTEX_DEFAULT, NULL);
+ cv_init(&zio->io_cv, NULL, CV_DEFAULT, NULL);
+
+ list_create(&zio->io_parent_list, sizeof (zio_link_t),
+ offsetof(zio_link_t, zl_parent_node));
+ list_create(&zio->io_child_list, sizeof (zio_link_t),
+ offsetof(zio_link_t, zl_child_node));
+
+ return (0);
+}
+
+static void
+zio_dest(void *arg, void *unused)
+{
+ zio_t *zio = arg;
+
+ mutex_destroy(&zio->io_lock);
+ cv_destroy(&zio->io_cv);
+ list_destroy(&zio->io_parent_list);
+ list_destroy(&zio->io_child_list);
+}
+