aboutsummaryrefslogtreecommitdiffstats
path: root/module
diff options
context:
space:
mode:
authorRichard Yao <[email protected]>2012-05-07 14:14:45 -0400
committerBrian Behlendorf <[email protected]>2012-08-27 12:01:37 -0700
commit62c4165a1bbfb7d68f8ebf93d32a6fc8ea4d4e33 (patch)
tree7b444d4698f60cdcaf184b645eda454cf5ad97ef /module
parentb876dac776afc8ea2c598eac53b9903de01c6172 (diff)
Revert Fix zpl_writepage() deadlock
The commit, cfc9a5c88f91f7b4d606fce89505e1f404691ea5, to fix deadlocks in zpl_writepage() relied on PF_MEMALLOC. That had the effect of disabling the direct reclaim path on all allocations originating from calls to this function, but it failed to address the actual cause of those deadlocks. This led to the same deadlocks being observed with swap on zvols, but not with swap on the loop device, which exercises this code. The use of PF_MEMALLOC also had the side effect of permitting allocations to be made from ZONE_DMA in instances that did not require it. This contributes to the possibility of panics caused by depletion of pages from ZONE_DMA. As such, we revert this patch in favor of a proper fix for both issues. Signed-off-by: Richard Yao <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Issue #726
Diffstat (limited to 'module')
-rw-r--r--module/zfs/zpl_file.c15
1 files changed, 1 insertions, 14 deletions
diff --git a/module/zfs/zpl_file.c b/module/zfs/zpl_file.c
index 5ac41c9d2..2e9f72ad1 100644
--- a/module/zfs/zpl_file.c
+++ b/module/zfs/zpl_file.c
@@ -358,20 +358,7 @@ zpl_putpage(struct page *pp, struct writeback_control *wbc, void *data)
ASSERT(PageLocked(pp));
ASSERT(!PageWriteback(pp));
- /*
- * Disable the normal reclaim path for zpl_putpage(). This
- * ensures that all memory allocations under this call path
- * will never enter direct reclaim. If this were to happen
- * the VM might try to write out additional pages by calling
- * zpl_putpage() again resulting in a deadlock.
- */
- if (current->flags & PF_MEMALLOC) {
- (void) zfs_putpage(mapping->host, pp, wbc);
- } else {
- current->flags |= PF_MEMALLOC;
- (void) zfs_putpage(mapping->host, pp, wbc);
- current->flags &= ~PF_MEMALLOC;
- }
+ (void) zfs_putpage(mapping->host, pp, wbc);
return (0);
}