From 1d44eb79b9ac674136c563ca77cb717b8de0bd6c Mon Sep 17 00:00:00 2001 From: Christoph Hellwig <hch@cloudius-systems.com> Date: Thu, 25 Jul 2013 17:30:04 +0200 Subject: [PATCH] zfs: support cache flushes in vdev_disk --- .../opensolaris/uts/common/fs/zfs/vdev_disk.c | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/bsd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c b/bsd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c index cf5059830..5a5fedbdc 100644 --- a/bsd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c +++ b/bsd/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_disk.c @@ -145,6 +145,24 @@ vdev_disk_start_bio(zio_t *zio) return ZIO_PIPELINE_STOP; } +static int +vdev_disk_start_flush(zio_t *zio) +{ + vdev_t *vd = zio->io_vd; + struct vdev_disk *dvd = vd->vdev_tsd; + struct bio *bio; + + bio = alloc_bio(); + bio->bio_cmd = BIO_FLUSH; + bio->bio_dev = dvd->device; + + bio->bio_caller1 = zio; + bio->bio_done = vdev_disk_bio_done; + + bio->bio_dev->driver->devops->strategy(bio); + return ZIO_PIPELINE_STOP; +} + static int vdev_disk_start_ioctl(zio_t *zio) { @@ -152,7 +170,7 @@ vdev_disk_start_ioctl(zio_t *zio) switch (zio->io_cmd) { case DKIOCFLUSHWRITECACHE: - if (1 || zfs_nocacheflush) { + if (zfs_nocacheflush) { kprintf("DKIOCFLUSHWRITECACHE ignored\n"); break; } @@ -161,10 +179,7 @@ vdev_disk_start_ioctl(zio_t *zio) break; } - kprintf("DKIOCFLUSHWRITECACHE used\n"); - abort(); - break; - + return vdev_disk_start_flush(zio); default: zio->io_error = ENOTSUP; break; -- GitLab