From: Brian Behlendorf Date: Fri, 11 Jun 2010 21:53:23 +0000 (-0700) Subject: Support TQ_FRONT flag used by taskq_dispatch() X-Git-Tag: spl-0.5.0~46 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=eb12b3782c94113d2d40d2da22265dc4111a672b;p=spl Support TQ_FRONT flag used by taskq_dispatch() Allow taskq_dispatch() to insert work items at the head of the queue instead of just the tail by passing the TQ_FRONT flag. --- diff --git a/include/sys/taskq.h b/include/sys/taskq.h index baa96ea..4e51d98 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 805749a..fba3802 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;