--- a/usr/src/uts/common/fs/zfs/zio.c Fri Feb 02 15:36:29 2007 -0800
+++ b/usr/src/uts/common/fs/zfs/zio.c Fri Feb 02 15:36:58 2007 -0800
@@ -435,8 +435,8 @@
zio_t *
zio_write(zio_t *pio, spa_t *spa, int checksum, int compress, int ncopies,
uint64_t txg, blkptr_t *bp, void *data, uint64_t size,
- zio_done_func_t *done, void *private, int priority, int flags,
- zbookmark_t *zb)
+ zio_done_func_t *ready, zio_done_func_t *done, void *private, int priority,
+ int flags, zbookmark_t *zb)
{
zio_t *zio;
@@ -450,6 +450,8 @@
ZIO_TYPE_WRITE, priority, flags | ZIO_FLAG_USER,
ZIO_STAGE_OPEN, ZIO_WRITE_PIPELINE);
+ zio->io_ready = ready;
+
zio->io_bookmark = *zb;
zio->io_logical = zio;
@@ -810,6 +812,9 @@
{
zio_t *pio = zio->io_parent;
+ if (zio->io_ready)
+ zio->io_ready(zio);
+
if (pio != NULL)
zio_notify_parent(zio, ZIO_STAGE_WAIT_CHILDREN_READY,
&pio->io_children_notready);