mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-25 18:59:33 +03:00
Add system_delay_taskq for long delay
Add a dedicated system_delay_taskq for long delay like spa_deadman and zpl_posix_acl_free. This will allow us to use system_taskq in the manner of dispatch multiple tasks and call taskq_wait_outstanding. Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Chunwei Chen <david.chen@osnexus.com> Closes #588
This commit is contained in:
parent
493492559e
commit
f200b83673
@ -129,6 +129,8 @@ typedef struct taskq_thread {
|
||||
|
||||
/* Global system-wide dynamic task queue available for all consumers */
|
||||
extern taskq_t *system_taskq;
|
||||
/* Global dynamic task queue for long delay */
|
||||
extern taskq_t *system_delay_taskq;
|
||||
|
||||
/* List of all taskqs */
|
||||
extern struct list_head tq_list;
|
||||
|
@ -50,6 +50,9 @@ MODULE_PARM_DESC(spl_taskq_thread_sequential,
|
||||
/* Global system-wide dynamic task queue available for all consumers */
|
||||
taskq_t *system_taskq;
|
||||
EXPORT_SYMBOL(system_taskq);
|
||||
/* Global dynamic task queue for long delay */
|
||||
taskq_t *system_delay_taskq;
|
||||
EXPORT_SYMBOL(system_delay_taskq);
|
||||
|
||||
/* Private dedicated taskq for creating new taskq threads on demand. */
|
||||
static taskq_t *dynamic_taskq;
|
||||
@ -1238,10 +1241,18 @@ spl_taskq_init(void)
|
||||
if (system_taskq == NULL)
|
||||
return (1);
|
||||
|
||||
system_delay_taskq = taskq_create("spl_delay_taskq", MAX(boot_ncpus, 4),
|
||||
maxclsyspri, boot_ncpus, INT_MAX, TASKQ_PREPOPULATE|TASKQ_DYNAMIC);
|
||||
if (system_delay_taskq == NULL) {
|
||||
taskq_destroy(system_taskq);
|
||||
return (1);
|
||||
}
|
||||
|
||||
dynamic_taskq = taskq_create("spl_dynamic_taskq", 1,
|
||||
maxclsyspri, boot_ncpus, INT_MAX, TASKQ_PREPOPULATE);
|
||||
if (dynamic_taskq == NULL) {
|
||||
taskq_destroy(system_taskq);
|
||||
taskq_destroy(system_delay_taskq);
|
||||
return (1);
|
||||
}
|
||||
|
||||
@ -1261,6 +1272,9 @@ spl_taskq_fini(void)
|
||||
taskq_destroy(dynamic_taskq);
|
||||
dynamic_taskq = NULL;
|
||||
|
||||
taskq_destroy(system_delay_taskq);
|
||||
system_delay_taskq = NULL;
|
||||
|
||||
taskq_destroy(system_taskq);
|
||||
system_taskq = NULL;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user