diff options
author | Brian Behlendorf <[email protected]> | 2015-07-27 11:55:03 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2015-07-29 07:42:11 -0700 |
commit | 6339c1b9dce9f7cf4b7269d588d7a9c3bf338ebb (patch) | |
tree | c1c36c69ff6fc7cc872b4b58d580f234f9ca0e37 | |
parent | 21a96fb635fb14a59efe44d7ea6767c5f9a586bc (diff) |
Bound zvol_threads module option
The zvol_threads module option should be bounded to a reasonable
range. The taskq must have at least 1 thread and shouldn't have
more than 1,024 at most. The default value of 32 is a reasonable
default.
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #3614
-rw-r--r-- | man/man5/zfs-module-parameters.5 | 2 | ||||
-rw-r--r-- | module/zfs/zvol.c | 7 |
2 files changed, 5 insertions, 4 deletions
diff --git a/man/man5/zfs-module-parameters.5 b/man/man5/zfs-module-parameters.5 index 5b6eb7afd..ccf386135 100644 --- a/man/man5/zfs-module-parameters.5 +++ b/man/man5/zfs-module-parameters.5 @@ -1567,7 +1567,7 @@ Default value: \fB16,384\fR. \fBzvol_threads\fR (uint) .ad .RS 12n -Number of threads for zvol device +Max number of threads to handle zvol I/O requests .sp Default value: \fB32\fR. .RE diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c index c9c8d2964..b073a3c5e 100644 --- a/module/zfs/zvol.c +++ b/module/zfs/zvol.c @@ -1624,6 +1624,7 @@ zvol_set_snapdev(const char *dsname, uint64_t snapdev) { int zvol_init(void) { + int threads = MIN(MAX(zvol_threads, 1), 1024); int error; list_create(&zvol_state_list, sizeof (zvol_state_t), @@ -1631,8 +1632,8 @@ zvol_init(void) mutex_init(&zvol_state_lock, NULL, MUTEX_DEFAULT, NULL); - zvol_taskq = taskq_create(ZVOL_DRIVER, zvol_threads, maxclsyspri, - zvol_threads * 2, INT_MAX, TASKQ_PREPOPULATE | TASKQ_DYNAMIC); + zvol_taskq = taskq_create(ZVOL_DRIVER, threads, maxclsyspri, + threads * 2, INT_MAX, TASKQ_PREPOPULATE | TASKQ_DYNAMIC); if (zvol_taskq == NULL) { printk(KERN_INFO "ZFS: taskq_create() failed\n"); error = -ENOMEM; @@ -1677,7 +1678,7 @@ module_param(zvol_major, uint, 0444); 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_PARM_DESC(zvol_threads, "Max number of threads to handle I/O requests"); module_param(zvol_max_discard_blocks, ulong, 0444); MODULE_PARM_DESC(zvol_max_discard_blocks, "Max number of blocks to discard"); |