aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEtienne Dechamps <e-t172@akegroup.org>2012-06-06 09:30:24 +0000
committerBrian Behlendorf <behlendorf1@llnl.gov>2012-06-11 16:43:48 +0000
commitab85f8455b995741c479f1cdcf21304de87fdaa8 (patch)
tree0786910a0506e787a841aec4c2e8491107c408ee
parentcac1f230e0537ceddead464dbd140e23a0556be6 (diff)
Honor logbias when writing to ZVOLs.
The logbias option is not taken into account when writing to ZVOLs. We fix that by using the same logic as in the zfs filesystem write code (see zfs_log.c). Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #774
-rw-r--r--module/zfs/zvol.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c
index 9b13134024f8..ba26543f783a 100644
--- a/module/zfs/zvol.c
+++ b/module/zfs/zvol.c
@@ -459,11 +459,15 @@ zvol_log_write(zvol_state_t *zv, dmu_tx_t *tx,
uint32_t blocksize = zv->zv_volblocksize;
zilog_t *zilog = zv->zv_zilog;
boolean_t slogging;
+ ssize_t immediate_write_sz;
if (zil_replaying(zilog, tx))
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 (size) {
itx_t *itx;
@@ -475,7 +479,7 @@ zvol_log_write(zvol_state_t *zv, dmu_tx_t *tx,
* Unlike zfs_log_write() we can be called with
* up to DMU_MAX_ACCESS/2 (5MB) writes.
*/
- if (blocksize > zvol_immediate_write_sz && !slogging &&
+ if (blocksize > immediate_write_sz && !slogging &&
size >= blocksize && offset % blocksize == 0) {
write_state = WR_INDIRECT; /* uses dmu_sync */
len = blocksize;