From: Greg Kroah-Hartman Date: Thu, 31 Oct 2013 12:25:31 +0000 (-0700) Subject: remove fs-buffer-move-allocation-failure-loop-into-the-allocator.patch from 3.11 X-Git-Tag: v3.4.68~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=caf49540bf2a462a0f2305e925194bb0c4be03f5;p=thirdparty%2Fkernel%2Fstable-queue.git remove fs-buffer-move-allocation-failure-loop-into-the-allocator.patch from 3.11 --- diff --git a/queue-3.11/fs-buffer-move-allocation-failure-loop-into-the-allocator.patch b/queue-3.11/fs-buffer-move-allocation-failure-loop-into-the-allocator.patch deleted file mode 100644 index 099d2bacc10..00000000000 --- a/queue-3.11/fs-buffer-move-allocation-failure-loop-into-the-allocator.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 84235de394d9775bfaa7fa9762a59d91fef0c1fc Mon Sep 17 00:00:00 2001 -From: Johannes Weiner -Date: Wed, 16 Oct 2013 13:47:00 -0700 -Subject: fs: buffer: move allocation failure loop into the allocator - -From: Johannes Weiner - -commit 84235de394d9775bfaa7fa9762a59d91fef0c1fc upstream. - -Buffer allocation has a very crude indefinite loop around waking the -flusher threads and performing global NOFS direct reclaim because it can -not handle allocation failures. - -The most immediate problem with this is that the allocation may fail due -to a memory cgroup limit, where flushers + direct reclaim might not make -any progress towards resolving the situation at all. Because unlike the -global case, a memory cgroup may not have any cache at all, only -anonymous pages but no swap. This situation will lead to a reclaim -livelock with insane IO from waking the flushers and thrashing unrelated -filesystem cache in a tight loop. - -Use __GFP_NOFAIL allocations for buffers for now. This makes sure that -any looping happens in the page allocator, which knows how to -orchestrate kswapd, direct reclaim, and the flushers sensibly. It also -allows memory cgroups to detect allocations that can't handle failure -and will allow them to ultimately bypass the limit if reclaim can not -make progress. - -Reported-by: azurIt -Signed-off-by: Johannes Weiner -Cc: Michal Hocko -Signed-off-by: Andrew Morton -Signed-off-by: Linus Torvalds -Signed-off-by: Greg Kroah-Hartman - ---- - fs/buffer.c | 14 ++++++++++++-- - mm/memcontrol.c | 2 ++ - 2 files changed, 14 insertions(+), 2 deletions(-) - ---- a/fs/buffer.c -+++ b/fs/buffer.c -@@ -1005,9 +1005,19 @@ grow_dev_page(struct block_device *bdev, - struct buffer_head *bh; - sector_t end_block; - int ret = 0; /* Will call free_more_memory() */ -+ gfp_t gfp_mask; - -- page = find_or_create_page(inode->i_mapping, index, -- (mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS)|__GFP_MOVABLE); -+ gfp_mask = mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS; -+ gfp_mask |= __GFP_MOVABLE; -+ /* -+ * XXX: __getblk_slow() can not really deal with failure and -+ * will endlessly loop on improvised global reclaim. Prefer -+ * looping in the allocator rather than here, at least that -+ * code knows what it's doing. -+ */ -+ gfp_mask |= __GFP_NOFAIL; -+ -+ page = find_or_create_page(inode->i_mapping, index, gfp_mask); - if (!page) - return ret; - ---- a/mm/memcontrol.c -+++ b/mm/memcontrol.c -@@ -2772,6 +2772,8 @@ done: - return 0; - nomem: - *ptr = NULL; -+ if (gfp_mask & __GFP_NOFAIL) -+ return 0; - return -ENOMEM; - bypass: - *ptr = root_mem_cgroup; diff --git a/queue-3.11/series b/queue-3.11/series index c0fc69d3471..ac7ad98ad30 100644 --- a/queue-3.11/series +++ b/queue-3.11/series @@ -60,5 +60,4 @@ writeback-fix-negative-bdi-max-pause.patch w1-call-request_module-with-w1-master-mutex-unlocked.patch wireless-radiotap-fix-parsing-buffer-overrun.patch wireless-cw1200-acquire-hwbus-lock-around-cw1200_irq_handler-call.patch -fs-buffer-move-allocation-failure-loop-into-the-allocator.patch