Skip to content
This repository has been archived by the owner on Feb 26, 2020. It is now read-only.

Commit

Permalink
Add system_delay_taskq for long delay
Browse files Browse the repository at this point in the history
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
  • Loading branch information
tuxoko authored and behlendorf committed Dec 8, 2016
1 parent 4934925 commit f200b83
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 0 deletions.
2 changes: 2 additions & 0 deletions include/sys/taskq.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
14 changes: 14 additions & 0 deletions module/spl/spl-taskq.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}

Expand All @@ -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;

Expand Down

0 comments on commit f200b83

Please sign in to comment.