summaryrefslogtreecommitdiffstats
path: root/sys/cddl
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2017-03-16 07:09:19 +0000
committermav <mav@FreeBSD.org>2017-03-16 07:09:19 +0000
commitba8e3c63addef8be003258061213f002a9a7ff43 (patch)
treef0a6e8394b07cd480770ee90e24fbab51b170f12 /sys/cddl
parent4890f61bdd0c2a1f0716bad8398dbecdbe328329 (diff)
downloadFreeBSD-src-ba8e3c63addef8be003258061213f002a9a7ff43.zip
FreeBSD-src-ba8e3c63addef8be003258061213f002a9a7ff43.tar.gz
MFC r314548: Completely skip cache flushing for not supporting log devices.
Diffstat (limited to 'sys/cddl')
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
index 5fc349d..fca2bad 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
@@ -827,7 +827,7 @@ zil_flush_vdevs(zilog_t *zilog)
avl_tree_t *t = &zilog->zl_vdev_tree;
void *cookie = NULL;
zil_vdev_node_t *zv;
- zio_t *zio;
+ zio_t *zio = NULL;
ASSERT(zilog->zl_writer);
@@ -840,12 +840,13 @@ zil_flush_vdevs(zilog_t *zilog)
spa_config_enter(spa, SCL_STATE, FTAG, RW_READER);
- zio = zio_root(spa, NULL, NULL, ZIO_FLAG_CANFAIL);
-
while ((zv = avl_destroy_nodes(t, &cookie)) != NULL) {
vdev_t *vd = vdev_lookup_top(spa, zv->zv_vdev);
- if (vd != NULL)
+ if (vd != NULL && !vd->vdev_nowritecache) {
+ if (zio == NULL)
+ zio = zio_root(spa, NULL, NULL, ZIO_FLAG_CANFAIL);
zio_flush(zio, vd);
+ }
kmem_free(zv, sizeof (*zv));
}
@@ -853,7 +854,8 @@ zil_flush_vdevs(zilog_t *zilog)
* Wait for all the flushes to complete. Not all devices actually
* support the DKIOCFLUSHWRITECACHE ioctl, so it's OK if it fails.
*/
- (void) zio_wait(zio);
+ if (zio)
+ (void) zio_wait(zio);
spa_config_exit(spa, SCL_STATE, FTAG);
}
OpenPOWER on IntegriCloud