summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2011-05-06 15:21:58 -0700
committerBrian Behlendorf <[email protected]>2011-05-06 15:23:58 -0700
commit372c2572336468cbf60272aa7e735b7ca0c3807c (patch)
tree220258fdc89b6a64641a9790f8515f91b296798a
parentdde6b7b137f56894a45723e7b49227629cfd3bd5 (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.h1
-rw-r--r--module/spl/spl-taskq.c4
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);