usr/src/uts/common/fs/zfs/zvol.c
changeset 10310 ba87b3315737
parent 10298 a0d52501437c
child 10588 dc03f981ea18
--- a/usr/src/uts/common/fs/zfs/zvol.c	Fri Aug 14 09:48:09 2009 -0700
+++ b/usr/src/uts/common/fs/zfs/zvol.c	Fri Aug 14 11:18:12 2009 -0600
@@ -990,6 +990,7 @@
 	uint32_t blocksize = zv->zv_volblocksize;
 	zilog_t *zilog = zv->zv_zilog;
 	boolean_t slogging;
+	ssize_t immediate_write_sz;
 
 	if (zil_disable)
 		return;
@@ -1001,7 +1002,11 @@
 		return;
 	}
 
-	slogging = spa_has_slogs(zilog->zl_spa);
+	immediate_write_sz = (zilog->zl_logbias == ZFS_LOGBIAS_THROUGHPUT)
+	    ? 0 : zvol_immediate_write_sz;
+
+	slogging = spa_has_slogs(zilog->zl_spa) &&
+	    (zilog->zl_logbias == ZFS_LOGBIAS_LATENCY);
 
 	while (resid) {
 		itx_t *itx;
@@ -1013,7 +1018,7 @@
 		 * Unlike zfs_log_write() we can be called with
 		 * upto DMU_MAX_ACCESS/2 (5MB) writes.
 		 */
-		if (blocksize > zvol_immediate_write_sz && !slogging &&
+		if (blocksize > immediate_write_sz && !slogging &&
 		    resid >= blocksize && off % blocksize == 0) {
 			write_state = WR_INDIRECT; /* uses dmu_sync */
 			len = blocksize;