From: Johannes Weiner <hannes@cmpxchg.org>
To: Kamal Mostafa <kamal@canonical.com>
Cc: linux-kernel@vger.kernel.org, stable@vger.kernel.org,
kernel-team@lists.ubuntu.com, Michal Hocko <mhocko@suse.cz>,
Andrew Morton <akpm@linux-foundation.org>,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [PATCH 3.8 79/81] fs: buffer: move allocation failure loop into the allocator
Date: Thu, 31 Oct 2013 10:01:16 -0400 [thread overview]
Message-ID: <20131031140116.GC14054@cmpxchg.org> (raw)
In-Reply-To: <1383069882-11437-80-git-send-email-kamal@canonical.com>
This fix was tagged as a reminder for a bigger series, please don't
apply for now.
On Tue, Oct 29, 2013 at 11:04:40AM -0700, Kamal Mostafa wrote:
> 3.8.13.12 -stable review patch. If anyone has any objections, please let me know.
>
> ------------------
>
> 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: Kamal Mostafa <kamal@canonical.com>
> ---
> fs/buffer.c | 14 ++++++++++++--
> mm/memcontrol.c | 2 ++
> 2 files changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/fs/buffer.c b/fs/buffer.c
> index 7a75c3e..be83882 100644
> --- a/fs/buffer.c
> +++ b/fs/buffer.c
> @@ -965,9 +965,19 @@ grow_dev_page(struct block_device *bdev, sector_t block,
> 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;
>
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index 6b7ff19..b150e66f 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -2614,6 +2614,8 @@ done:
> return 0;
> nomem:
> *ptr = NULL;
> + if (gfp_mask & __GFP_NOFAIL)
> + return 0;
> return -ENOMEM;
> bypass:
> *ptr = root_mem_cgroup;
> --
> 1.8.1.2
>
next prev parent reply other threads:[~2013-10-31 14:01 UTC|newest]
Thread overview: 84+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-29 18:03 [3.8.y.z extended stable] Linux 3.8.13.12 stable review Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 01/81] ipvs: add backup_only flag to avoid loops Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 02/81] random: run random_int_secret_init() run after all late_initcalls Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 03/81] tile: use a more conservative __my_cpu_offset in CONFIG_PREEMPT Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 04/81] ALSA: snd-usb-usx2y: remove bogus frame checks Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 05/81] drm/i915/hsw: Disable L3 caching of atomic memory operations Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 06/81] drm/i915: Only apply DPMS to the encoder if enabled Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 07/81] ALSA: hda - hdmi: Fix channel map switch not taking effect Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 08/81] ALSA: hda - Add fixup for ASUS N56VZ Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 09/81] hwmon: (applesmc) Always read until end of data Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 10/81] drm/radeon: fix typo in CP DMA register headers Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 11/81] drm/radeon: fix hw contexts for SUMO2 asics Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 12/81] drm/radeon: forever loop on error in radeon_do_test_moves() Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 13/81] i2c: omap: Clear ARDY bit twice Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 14/81] KVM: PPC: Book3S HV: Fix typo in saving DSCR Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 15/81] random: allow architectures to optionally define random_get_entropy() Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 16/81] Btrfs: use right root when checking for hash collision Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 17/81] compiler-gcc4.h: Reorder macros based upon gcc ver Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 18/81] compiler-gcc.h: Add gcc-recommended GCC_VERSION macro Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 19/81] compiler/gcc4: Add quirk for 'asm goto' miscompilation bug Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 20/81] ALSA: hda - Fix microphone for Sony VAIO Pro 13 (Haswell model) Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 21/81] ext4: fix memory leak in xattr Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 22/81] vfs: allow O_PATH file descriptors for fstatfs() Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 23/81] parisc: fix interruption handler to respect pagefault_disable() Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 24/81] tuntap: correctly handle error in tun_set_iff() Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 25/81] xen-blkfront: use a different scatterlist for each request Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 26/81] can: flexcan: fix flexcan_chip_start() on imx6 Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 27/81] can: flexcan: flexcan_chip_start: fix regression, mark one MB for TX and abort pending TX Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 28/81] caif: Add missing braces to multiline if in cfctrl_linkup_request Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 29/81] tcp: Add missing braces to do_tcp_setsockopt Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 30/81] ipv6/exthdrs: accept tlv which includes only padding Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 31/81] net: fib: fib6_add: fix potential NULL pointer dereference Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 32/81] net: sctp: fix smatch warning in sctp_send_asconf_del_ip Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 33/81] net: flow_dissector: fix thoff for IPPROTO_AH Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 34/81] net_sched: htb: fix a typo in htb_change_class() Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 35/81] r8169: enforce RX_MULTI_EN for the 8168f Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 36/81] netpoll: fix NULL pointer dereference in netpoll_cleanup Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 37/81] net: sctp: fix ipv6 ipsec encryption bug in sctp_v6_xmit Kamal Mostafa
2013-10-29 18:03 ` [PATCH 3.8 38/81] xen-netback: count number required slots for an skb more carefully Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 39/81] resubmit bridge: fix message_age_timer calculation Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 40/81] bridge: Clamp forward_delay when enabling STP Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 41/81] bridge: use br_port_get_rtnl within rtnl lock Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 42/81] bridge: fix NULL pointer deref of br_port_get_rcu Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 43/81] ip6_tunnels: raddr and laddr are inverted in nl msg Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 44/81] net: sctp: rfc4443: do not report ICMP redirects to user space Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 45/81] net:dccp: " Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 46/81] ip: use ip_hdr() in __ip_make_skb() to retrieve IP header Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 47/81] ip: generate unique IP identificator if local fragmentation is allowed Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 48/81] ipv6: udp packets following an UFO enqueued packet need also be handled by UFO Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 49/81] via-rhine: fix VLAN priority field (PCP, IEEE 802.1p) Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 50/81] dm9601: fix IFF_ALLMULTI handling Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 51/81] bonding: Fix broken promiscuity reference counting issue Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 52/81] ipv6: gre: correct calculation of max_headroom Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 53/81] ipv4 igmp: use in_dev_put in timer handlers instead of __in_dev_put Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 54/81] ipv6 mcast: use in6_dev_put in timer handlers instead of __in6_dev_put Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 55/81] ll_temac: Reset dma descriptors indexes on ndo_open Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 56/81] sit: allow to use rtnl ops on fb tunnel Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 57/81] ip6tnl: " Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 58/81] esp_scsi: Fix tag state corruption when autosensing Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 59/81] sparc64: Fix ITLB handler of null page Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 60/81] sparc64: Remove RWSEM export leftovers Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 61/81] sparc64: Fix off by one in trampoline TLB mapping installation loop Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 62/81] sparc64: Fix not SRA'ed %o5 in 32-bit traced syscall Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 63/81] sparc32: Fix exit flag passed from traced sys_sigreturn Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 64/81] cifs: Fix inability to write files >2GB to SMB2/3 shares Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 65/81] xhci: quirk for extra long delay for S4 Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 66/81] xhci: Fix spurious wakeups after S5 on Haswell Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 67/81] USB: support new huawei devices in option.c Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 68/81] USB: serial: ti_usb_3410_5052: add Abbott strip port ID to combined table as well Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 69/81] USB: serial: option: add support for Inovia SEW858 device Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 70/81] ARM: 7851/1: check for number of arguments in syscall_get/set_arguments() Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 71/81] USB: quirks.c: add one device that cannot deal with suspension Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 72/81] ALSA: us122l: Fix pcm_usb_stream mmapping regression Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 73/81] dm snapshot: fix data corruption Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 74/81] USB: quirks: add touchscreen that is dazzeled by remote wakeup Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 75/81] serial: vt8500: Fix range-checking on vt8500_uart_ports Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 76/81] serial: vt8500: add missing braces Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 77/81] usb: serial: option: blacklist Olivetti Olicard200 Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 78/81] usb-storage: add quirk for mandatory READ_CAPACITY_16 Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 79/81] fs: buffer: move allocation failure loop into the allocator Kamal Mostafa
2013-10-31 14:01 ` Johannes Weiner [this message]
2013-10-31 16:40 ` Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 80/81] writeback: fix negative bdi max pause Kamal Mostafa
2013-10-29 18:04 ` [PATCH 3.8 81/81] mm: fix BUG in __split_huge_page_pmd Kamal Mostafa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131031140116.GC14054@cmpxchg.org \
--to=hannes@cmpxchg.org \
--cc=akpm@linux-foundation.org \
--cc=kamal@canonical.com \
--cc=kernel-team@lists.ubuntu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mhocko@suse.cz \
--cc=stable@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).