From ded576e28fe70a40e78a90e4668de8130d599380 Mon Sep 17 00:00:00 2001 From: Tim Chase Date: Mon, 23 Mar 2015 12:10:19 -0500 Subject: [PATCH] Set the maximum ZVOL transfer size correctly ZoL had been setting max_sectors to UINT_MAX, but until Linux 3.19, it the kernel artifically capped it at 1024 (BLK_DEF_MAX_SECTORS). This cap was removed in torvalds/linux@34b48db. This patch changes it to DMU_MAX_ACCESS (in sectors) and also changes the ASSERT in dmu_tx_hold_write() to allow the maximum transfer size. Signed-off-by: Tim Chase Signed-off-by: Brian Behlendorf Closes #3212 --- module/zfs/dmu_tx.c | 2 +- module/zfs/zvol.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/module/zfs/dmu_tx.c b/module/zfs/dmu_tx.c index cdf5a6d0fcfa..3d6dcc70f305 100644 --- a/module/zfs/dmu_tx.c +++ b/module/zfs/dmu_tx.c @@ -420,7 +420,7 @@ dmu_tx_hold_write(dmu_tx_t *tx, uint64_t object, uint64_t off, int len) dmu_tx_hold_t *txh; ASSERT(tx->tx_txg == 0); - ASSERT(len < DMU_MAX_ACCESS); + ASSERT(len <= DMU_MAX_ACCESS); ASSERT(len == 0 || UINT64_MAX - off >= len - 1); txh = dmu_tx_hold_object_impl(tx, tx->tx_objset, diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c index 4febbb6bf1d7..d180b5b5b76f 100644 --- a/module/zfs/zvol.c +++ b/module/zfs/zvol.c @@ -1389,7 +1389,7 @@ __zvol_create_minor(const char *name, boolean_t ignore_snapdev) set_capacity(zv->zv_disk, zv->zv_volsize >> 9); - blk_queue_max_hw_sectors(zv->zv_queue, UINT_MAX); + blk_queue_max_hw_sectors(zv->zv_queue, DMU_MAX_ACCESS / 512); blk_queue_max_segments(zv->zv_queue, UINT16_MAX); blk_queue_max_segment_size(zv->zv_queue, UINT_MAX); blk_queue_physical_block_size(zv->zv_queue, zv->zv_volblocksize);