aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sys/taskq.h2
-rw-r--r--module/spl/spl-taskq.c8
2 files changed, 9 insertions, 1 deletions
diff --git a/include/sys/taskq.h b/include/sys/taskq.h
index baa96eaa0..4e51d98dd 100644
--- a/include/sys/taskq.h
+++ b/include/sys/taskq.h
@@ -39,6 +39,7 @@
#define TASKQ_CPR_SAFE 0x00000002
#define TASKQ_DYNAMIC 0x00000004
#define TASKQ_THREADS_CPU_PCT 0x00000008
+#define TASKQ_DC_BATCH 0x00000010
typedef unsigned long taskqid_t;
typedef void (task_func_t)(void *);
@@ -53,6 +54,7 @@ typedef void (task_func_t)(void *);
#define TQ_NOQUEUE 0x01000000
#define TQ_NOALLOC 0x02000000
#define TQ_NEW 0x04000000
+#define TQ_FRONT 0x08000000
#define TQ_ACTIVE 0x80000000
typedef struct taskq {
diff --git a/module/spl/spl-taskq.c b/module/spl/spl-taskq.c
index 805749a14..fba38021f 100644
--- a/module/spl/spl-taskq.c
+++ b/module/spl/spl-taskq.c
@@ -274,7 +274,13 @@ __taskq_dispatch(taskq_t *tq, task_func_t func, void *arg, uint_t flags)
GOTO(out, rc = 0);
spin_lock(&t->t_lock);
- list_add_tail(&t->t_list, &tq->tq_pend_list);
+
+ /* Queue to the head instead of the tail */
+ if (flags & TQ_FRONT)
+ list_add(&t->t_list, &tq->tq_pend_list);
+ else
+ list_add_tail(&t->t_list, &tq->tq_pend_list);
+
t->t_id = rc = tq->tq_next_id;
tq->tq_next_id++;
t->t_func = func;