summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--module/zfs/zvol.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c
index 9b1313402..9dd9547e2 100644
--- a/module/zfs/zvol.c
+++ b/module/zfs/zvol.c
@@ -1390,8 +1390,14 @@ zvol_init(void)
{
int error;
+ /*
+ * The zvol taskqs are created with TASKQ_NORECLAIM so they may be
+ * used safely as a swap device. If direct reclaim is allowed then
+ * they quickly deadlock in one of the internal memory allocations.
+ */
zvol_taskq = taskq_create(ZVOL_DRIVER, zvol_threads, maxclsyspri,
- zvol_threads, INT_MAX, TASKQ_PREPOPULATE);
+ zvol_threads, INT_MAX,
+ TASKQ_PREPOPULATE | TASKQ_NORECLAIM);
if (zvol_taskq == NULL) {
printk(KERN_INFO "ZFS: taskq_create() failed\n");
return (-ENOMEM);