diff options
-rw-r--r-- | include/sys/taskq.h | 2 | ||||
-rw-r--r-- | module/spl/spl-taskq.c | 8 |
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; |