]> granicus.if.org Git - zfs/commitdiff
Bound zvol_threads module option
authorBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 27 Jul 2015 18:55:03 +0000 (11:55 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 29 Jul 2015 14:42:11 +0000 (07:42 -0700)
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 <behlendorf1@llnl.gov>
Closes #3614

man/man5/zfs-module-parameters.5
module/zfs/zvol.c

index 5b6eb7afd9be22bfee96f57843d20ab27beae996..ccf386135ca58b17395fbe7d2d0b587f3bb7e86f 100644 (file)
@@ -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
index c9c8d2964933c78b586ea9436f18b5a471a9d47b..b073a3c5ee5d2ec85e0b2e038e953dbc603524c0 100644 (file)
@@ -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");