]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
remove fs-buffer-move-allocation-failure-loop-into-the-allocator.patch from 3.11
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 31 Oct 2013 12:25:31 +0000 (05:25 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 31 Oct 2013 12:25:31 +0000 (05:25 -0700)
queue-3.11/fs-buffer-move-allocation-failure-loop-into-the-allocator.patch [deleted file]
queue-3.11/series

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 (file)
index 099d2ba..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-From 84235de394d9775bfaa7fa9762a59d91fef0c1fc Mon Sep 17 00:00:00 2001
-From: Johannes Weiner <hannes@cmpxchg.org>
-Date: Wed, 16 Oct 2013 13:47:00 -0700
-Subject: fs: buffer: move allocation failure loop into the allocator
-
-From: Johannes Weiner <hannes@cmpxchg.org>
-
-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 <azurit@pobox.sk>
-Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
-Cc: Michal Hocko <mhocko@suse.cz>
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- 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;
index c0fc69d347106ce0c13a02215bc367616eb7967c..ac7ad98ad30aa072ee8bce67e1263c16e468e5a1 100644 (file)
@@ -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