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
This commit is contained in:
parent
518b487602
commit
ce90208cf9
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue