diff options
author | Richard Yao <[email protected]> | 2015-09-07 12:35:21 -0400 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2015-09-09 14:30:47 -0700 |
commit | d4bf6d8429371634b0c6bcc14b5868d849b7c07d (patch) | |
tree | e49727247632bc36448f61186b6a76e88c79d2a4 /module/spl | |
parent | 4fa4cab972899ecf6266c23986159a109dbcac5b (diff) |
Disable direct reclaim in taskq worker threads on Linux 3.9+
Illumos does not have direct reclaim and code run inside taskq worker
threads is not designed to deal with it. Allowing direct reclaim inside
a worker thread can therefore deadlock. We set PF_MEMALLOC_NOIO through
memalloc_noio_save() to indicate to the kernel's reclaim code that we
are inside a context where memory allocations cannot be allowed to block
on filesystem activity.
Signed-off-by: Richard Yao <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Issue zfsonlinux/zfs#1274
Issue zfsonlinux/zfs#2390
Closes #474
Diffstat (limited to 'module/spl')
-rw-r--r-- | module/spl/spl-taskq.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/module/spl/spl-taskq.c b/module/spl/spl-taskq.c index 82e71a388..f6ef56251 100644 --- a/module/spl/spl-taskq.c +++ b/module/spl/spl-taskq.c @@ -817,6 +817,10 @@ taskq_thread(void *args) tq = tqt->tqt_tq; current->flags |= PF_NOFREEZE; + #if defined(PF_MEMALLOC_NOIO) + (void) memalloc_noio_save(); + #endif + sigfillset(&blocked); sigprocmask(SIG_BLOCK, &blocked, NULL); flush_signals(current); |