diff options
author | Dave Chinner <david@fromorbit.com> | 2014-03-13 04:13:05 -0400 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2014-03-13 04:13:05 -0400 |
commit | 5f44e4c185ec5a4a438841cbd4983d0c4a106a4a (patch) | |
tree | 894419c679250407eb7a76af9d1525c47226a085 /fs/xfs/xfs_buf.c | |
parent | 49ae4b97d760d2e63394b96a7e14cbb43b9dc942 (diff) | |
parent | fe4c224aa1ffa4352849ac5f452de7132739bee2 (diff) |
Merge branch 'xfs-bug-fixes-for-3.15-2' into for-next
Diffstat (limited to 'fs/xfs/xfs_buf.c')
-rw-r--r-- | fs/xfs/xfs_buf.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index 9c061ef2b0d9..107f2fdfe41f 100644 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c | |||
@@ -396,7 +396,17 @@ _xfs_buf_map_pages( | |||
396 | bp->b_addr = NULL; | 396 | bp->b_addr = NULL; |
397 | } else { | 397 | } else { |
398 | int retried = 0; | 398 | int retried = 0; |
399 | unsigned noio_flag; | ||
399 | 400 | ||
401 | /* | ||
402 | * vm_map_ram() will allocate auxillary structures (e.g. | ||
403 | * pagetables) with GFP_KERNEL, yet we are likely to be under | ||
404 | * GFP_NOFS context here. Hence we need to tell memory reclaim | ||
405 | * that we are in such a context via PF_MEMALLOC_NOIO to prevent | ||
406 | * memory reclaim re-entering the filesystem here and | ||
407 | * potentially deadlocking. | ||
408 | */ | ||
409 | noio_flag = memalloc_noio_save(); | ||
400 | do { | 410 | do { |
401 | bp->b_addr = vm_map_ram(bp->b_pages, bp->b_page_count, | 411 | bp->b_addr = vm_map_ram(bp->b_pages, bp->b_page_count, |
402 | -1, PAGE_KERNEL); | 412 | -1, PAGE_KERNEL); |
@@ -404,6 +414,7 @@ _xfs_buf_map_pages( | |||
404 | break; | 414 | break; |
405 | vm_unmap_aliases(); | 415 | vm_unmap_aliases(); |
406 | } while (retried++ <= 1); | 416 | } while (retried++ <= 1); |
417 | memalloc_noio_restore(noio_flag); | ||
407 | 418 | ||
408 | if (!bp->b_addr) | 419 | if (!bp->b_addr) |
409 | return -ENOMEM; | 420 | return -ENOMEM; |