X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=module%2Fzfs%2Fzvol.c;h=07bda6dbaa4e742f649d7e7ecdcf2104be4ce78f;hb=9e11c7eee232b73600c2590c8c3326b2725daba5;hp=125d58de918b750611034a6f9cc4043eca2fa0fa;hpb=74497b7ab6af69434453e03c755d3f6e6e655aee;p=zfs.git diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c index 125d58d..07bda6d 100644 --- a/module/zfs/zvol.c +++ b/module/zfs/zvol.c @@ -49,6 +49,7 @@ unsigned int zvol_inhibit_dev = 0; unsigned int zvol_major = ZVOL_MAJOR; unsigned int zvol_threads = 32; +unsigned long zvol_max_discard_blocks = 16384; static taskq_t *zvol_taskq; static kmutex_t zvol_state_lock; @@ -1242,7 +1243,9 @@ __zvol_create_minor(const char *name) blk_queue_physical_block_size(zv->zv_queue, zv->zv_volblocksize); blk_queue_io_opt(zv->zv_queue, zv->zv_volblocksize); #ifdef HAVE_BLK_QUEUE_DISCARD - blk_queue_max_discard_sectors(zv->zv_queue, UINT_MAX); + blk_queue_max_discard_sectors(zv->zv_queue, + (zvol_max_discard_blocks * zv->zv_volblocksize) >> 9); + blk_queue_discard_granularity(zv->zv_queue, zv->zv_volblocksize); queue_flag_set_unlocked(QUEUE_FLAG_DISCARD, zv->zv_queue); #endif #ifdef HAVE_BLK_QUEUE_NONROT @@ -1446,3 +1449,6 @@ MODULE_PARM_DESC(zvol_major, "Major number for zvol device"); module_param(zvol_threads, uint, 0444); MODULE_PARM_DESC(zvol_threads, "Number of threads for zvol device"); + +module_param(zvol_max_discard_blocks, ulong, 0444); +MODULE_PARM_DESC(zvol_max_discard_blocks, "Max number of blocks to discard at once");