diff --git a/include/sys/taskq.h b/include/sys/taskq.h
index c83409d493..57f8b1cb59 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 5a17f1ccf5..f9ee570351 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);