diff --git a/module/zfs/zil.c b/module/zfs/zil.c index 48a3e8fc40..efb8c8761f 100644 --- a/module/zfs/zil.c +++ b/module/zfs/zil.c @@ -1197,12 +1197,6 @@ zil_lwb_flush_vdevs_done(zio_t *zio) * includes ZIO errors from either this LWB's write or * flush, as well as any errors from other dependent LWBs * (e.g. a root LWB ZIO that might be a child of this LWB). - * - * With that said, it's important to note that LWB flush - * errors are not propagated up to the LWB root ZIO. - * This is incorrect behavior, and results in VDEV flush - * errors not being handled correctly here. See the - * comment above the call to "zio_flush" for details. */ zcw->zcw_zio_error = zio->io_error; @@ -1315,15 +1309,12 @@ zil_lwb_write_done(zio_t *zio) vdev_t *vd = vdev_lookup_top(spa, zv->zv_vdev); if (vd != NULL) { /* - * The "ZIO_FLAG_DONT_PROPAGATE" is currently - * always used within "zio_flush". This means, - * any errors when flushing the vdev(s), will - * (unfortunately) not be handled correctly, - * since these "zio_flush" errors will not be - * propagated up to "zil_lwb_flush_vdevs_done". + * Issue DKIOCFLUSHWRITECACHE to all vdevs that have + * been touched by writes for this or previous lwbs + * that had their flushes deferred. Flush errors will + * be delivered to zil_lwb_flush_vdevs_done(). */ - zio_flush(lwb->lwb_root_zio, vd, - ZIO_FLAG_DONT_PROPAGATE); + zio_flush(lwb->lwb_root_zio, vd, 0); } kmem_free(zv, sizeof (*zv)); }