diff options
author | Etienne Dechamps <e-t172@akegroup.org> | 2012-06-06 09:30:24 +0000 |
---|---|---|
committer | Brian Behlendorf <behlendorf1@llnl.gov> | 2012-06-11 16:43:48 +0000 |
commit | ab85f8455b995741c479f1cdcf21304de87fdaa8 (patch) | |
tree | 0786910a0506e787a841aec4c2e8491107c408ee | |
parent | cac1f230e0537ceddead464dbd140e23a0556be6 (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.c | 8 |
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; |