Permalink
Browse files

Disable direct reclaim on zvols

Previously, it was possible for the direct reclaim path to be invoked
when a write to a zvol was made. When a zvol is used as a swap device,
this often causes swap requests to depend on additional swap requests,
which deadlocks. We address this by disabling the direct reclaim path
on zvols.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #342
  • Loading branch information...
1 parent 518b487 commit ce90208cf9e04df966429f115d8831371ea9afce @ryao committed with behlendorf Apr 16, 2012
Showing with 7 additions and 1 deletion.
  1. +7 −1 module/zfs/zvol.c
View
@@ -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);

0 comments on commit ce90208

Please sign in to comment.