linux/net/core
Eric Dumazet a9e3d78962 net: use __GFP_NORETRY for high order allocations
[ Upstream commit ed98df3361 ]

sock_alloc_send_pskb() & sk_page_frag_refill()
have a loop trying high order allocations to prepare
skb with low number of fragments as this increases performance.

Problem is that under memory pressure/fragmentation, this can
trigger OOM while the intent was only to try the high order
allocations, then fallback to order-0 allocations.

We had various reports from unexpected regressions.

According to David, setting __GFP_NORETRY should be fine,
as the asynchronous compaction is still enabled, and this
will prevent OOM from kicking as in :

CFSClientEventm invoked oom-killer: gfp_mask=0x42d0, order=3, oom_adj=0,
oom_score_adj=0, oom_score_badness=2 (enabled),memcg_scoring=disabled
CFSClientEventm

Call Trace:
 [<ffffffff8043766c>] dump_header+0xe1/0x23e
 [<ffffffff80437a02>] oom_kill_process+0x6a/0x323
 [<ffffffff80438443>] out_of_memory+0x4b3/0x50d
 [<ffffffff8043a4a6>] __alloc_pages_may_oom+0xa2/0xc7
 [<ffffffff80236f42>] __alloc_pages_nodemask+0x1002/0x17f0
 [<ffffffff8024bd23>] alloc_pages_current+0x103/0x2b0
 [<ffffffff8028567f>] sk_page_frag_refill+0x8f/0x160
 [<ffffffff80295fa0>] tcp_sendmsg+0x560/0xee0
 [<ffffffff802a5037>] inet_sendmsg+0x67/0x100
 [<ffffffff80283c9c>] __sock_sendmsg_nosec+0x6c/0x90
 [<ffffffff80283e85>] sock_sendmsg+0xc5/0xf0
 [<ffffffff802847b6>] __sys_sendmsg+0x136/0x430
 [<ffffffff80284ec8>] sys_sendmsg+0x88/0x110
 [<ffffffff80711472>] system_call_fastpath+0x16/0x1b
Out of Memory: Kill process 2856 (bash) score 9999 or sacrifice child

Signed-off-by: Eric Dumazet <edumazet@google.com>
Acked-by: David Rientjes <rientjes@google.com>
Acked-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2014-03-06 21:30:05 -08:00
..
datagram.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-04-30 03:55:20 -04:00
dev_addr_lists.c net/core: dev_mc_sync_multiple calls wrong helper 2013-05-31 16:56:56 -07:00
dev_ioctl.c net: fix kernel deadlock with interface rename and netdev name retrieval. 2013-06-26 13:42:54 -07:00
dev.c net: core: introduce netif_skb_dev_features 2014-03-06 21:30:05 -08:00
drop_monitor.c net: drop_monitor: fix the value of maxattr 2014-01-15 15:28:47 -08:00
dst.c net: add skb_dst_set_noref_force 2013-04-02 00:22:53 +02:00
ethtool.c vlan: restore ethtool ABI to control VLAN hardware acceleration 2013-06-17 17:09:35 -07:00
fib_rules.c net: fix 'ip rule' iif/oif device rename 2014-03-06 21:30:03 -08:00
filter.c bpf: do not use reciprocal divide 2014-02-06 11:08:16 -08:00
flow_dissector.c net: flow_dissector: fail on evil iph->ihl 2013-11-20 12:27:46 -08:00
flow.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-04-01 13:36:50 -04:00
gen_estimator.c
gen_stats.c
iovec.c net: rework recvmsg handler msg_name and msg_namelen logic 2013-12-08 07:29:25 -08:00
link_watch.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2012-10-02 13:38:27 -07:00
Makefile net: move procfs code to net/core/net-procfs.c 2013-02-19 00:51:10 -05:00
neighbour.c vlan: Fix header ops passthru when doing TX VLAN offload. 2014-01-15 15:28:49 -08:00
net_namespace.c proc: Split the namespace stuff out into linux/proc_ns.h 2013-05-01 17:29:39 -04:00
net-procfs.c net: Print functions in /proc/net/ptype without the offset. 2013-03-25 14:12:55 -04:00
net-sysfs.c rps_dev_flow_table_release(): no need to delay vfree() 2013-05-06 11:06:51 -04:00
net-sysfs.h
net-traces.c
netevent.c
netpoll.c netpoll: fix netconsole IPv6 setup 2014-03-06 21:30:03 -08:00
netprio_cgroup.c Revert "netprio_cgroup: make local table static" 2013-04-12 03:06:44 -04:00
pktgen.c {pktgen, xfrm} Update IPv4 header total len and checksum after tranformation 2013-12-08 07:29:26 -08:00
request_sock.c tcp: fix a panic on UP machines in reqsk_fastopen_remove 2013-01-14 18:10:05 -05:00
rtnetlink.c rtnetlink: rtnl_bridge_getlink: Call nlmsg_find_attr() with ifinfomsg header 2013-09-14 06:54:55 -07:00
scm.c net: Check the correct namespace when spoofing pid over SCM_RIGHTS 2013-09-26 17:18:05 -07:00
secure_seq.c net: secure_seq: Fix warning when CONFIG_IPV6 and CONFIG_INET are not selected 2013-11-04 04:31:01 -08:00
skbuff.c net: add and use skb_gso_transport_seglen() 2014-03-06 21:30:05 -08:00
sock_diag.c sock_diag: fix filter code sent to userspace 2013-06-10 22:23:32 -07:00
sock.c net: use __GFP_NORETRY for high order allocations 2014-03-06 21:30:05 -08:00
stream.c
sysctl_net_core.c net: check net.core.somaxconn sysctl values 2013-09-14 06:54:54 -07:00
timestamping.c
user_dma.c
utils.c net: core: let's use native isxdigit instead of custom 2013-03-27 12:48:32 -04:00