diff options
author | Brian Behlendorf <[email protected]> | 2011-05-06 15:21:58 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2011-05-06 15:23:58 -0700 |
commit | 372c2572336468cbf60272aa7e735b7ca0c3807c (patch) | |
tree | 220258fdc89b6a64641a9790f8515f91b296798a | |
parent | dde6b7b137f56894a45723e7b49227629cfd3bd5 (diff) |
Add TASKQ_NORECLAIM flag
It has become necessary to be able to optionally disable
direct memory reclaim for certain taskqs. To support
this the TASKQ_NORECLAIM flags has been added which sets
the PF_MEMALLOC bit for all threads in the taskq.
-rw-r--r-- | include/sys/taskq.h | 1 | ||||
-rw-r--r-- | module/spl/spl-taskq.c | 4 |
2 files changed, 5 insertions, 0 deletions
diff --git a/include/sys/taskq.h b/include/sys/taskq.h index c83409d49..57f8b1cb5 100644 --- a/include/sys/taskq.h +++ b/include/sys/taskq.h @@ -40,6 +40,7 @@ #define TASKQ_DYNAMIC 0x00000004 #define TASKQ_THREADS_CPU_PCT 0x00000008 #define TASKQ_DC_BATCH 0x00000010 +#define TASKQ_NORECLAIM 0x00000020 typedef unsigned long taskqid_t; typedef void (task_func_t)(void *); diff --git a/module/spl/spl-taskq.c b/module/spl/spl-taskq.c index 5a17f1ccf..f9ee57035 100644 --- a/module/spl/spl-taskq.c +++ b/module/spl/spl-taskq.c @@ -371,6 +371,10 @@ taskq_thread(void *args) ASSERT(tq); current->flags |= PF_NOFREEZE; + /* Disable the direct memory reclaim path */ + if (tq->tq_flags & TASKQ_NORECLAIM) + current->flags |= PF_MEMALLOC; + sigfillset(&blocked); sigprocmask(SIG_BLOCK, &blocked, NULL); flush_signals(current); |