Glauber Costa
0e90b31f4b
net: introduce res_counter_charge_nofail() for socket allocations
...
There is a case in __sk_mem_schedule(), where an allocation
is beyond the maximum, but yet we are allowed to proceed.
It happens under the following condition:
sk->sk_wmem_queued + size >= sk->sk_sndbuf
The network code won't revert the allocation in this case,
meaning that at some point later it'll try to do it. Since
this is never communicated to the underlying res_counter
code, there is an inbalance in res_counter uncharge operation.
I see two ways of fixing this:
1) storing the information about those allocations somewhere
in memcg, and then deducting from that first, before
we start draining the res_counter,
2) providing a slightly different allocation function for
the res_counter, that matches the original behavior of
the network code more closely.
I decided to go for #2 here, believing it to be more elegant,
since #1 would require us to do basically that, but in a more
obscure way.
Signed-off-by: Glauber Costa <glommer@parallels.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@suse.cz>
CC: Tejun Heo <tj@kernel.org>
CC: Li Zefan <lizf@cn.fujitsu.com>
CC: Laurent Chavey <chavey@google.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2012-01-22 15:08:46 -05:00
..
9p
9p: Reduce object size with CONFIG_NET_9P_DEBUG
2012-01-05 10:51:44 -06:00
bluetooth
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-next
2012-01-10 15:44:17 -05:00
caif
caif-spi: Bugfix for dump upon device removal
2011-12-06 13:34:12 -05:00
irda
iucv
af_iucv: get rid of state IUCV_SEVERED
2011-12-20 14:05:03 -05:00
netfilter
Merge branch 'nf-next' of git://1984.lsi.us.es/net-next
2011-12-25 02:21:45 -05:00
netns
per-netns ipv4 sysctl_tcp_mem
2011-12-12 19:04:11 -05:00
nfc
NFC: Export a new attribute nfcid1 in target info
2012-01-04 14:30:43 -05:00
phonet
net: dont hold rtnl mutex during netlink dump callbacks
2011-05-02 15:26:28 -07:00
sctp
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2011-12-23 17:13:56 -05:00
tc_act
act_api.h
net: sched: constify tcf_proto and tc_action
2011-07-06 02:52:16 -07:00
addrconf.h
ipv6: Check RA for sllao when configuring optimistic ipv6 address (v2)
2012-01-04 15:53:20 -05:00
af_ieee802154.h
af_rxrpc.h
net: Remove __KERNEL__ cpp checks from include/net
2011-04-24 10:54:56 -07:00
af_unix.h
af_unix: Move CINQ/COUTQ code to helpers
2011-12-30 16:45:45 -05:00
ah.h
arp.h
ipv6: Use universal hash for NDISC.
2011-12-28 15:06:58 -05:00
atmclip.h
atm: clip: Use device neigh support on top of "arp_tbl".
2011-11-30 18:51:03 -05:00
ax25.h
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
ax88796.h
cfg80211-wext.h
cfg80211: remove unused wext handler exports
2011-08-08 14:26:29 -04:00
cfg80211.h
cfg80211: Return beacon loss count in station
2011-12-19 14:34:13 -05:00
checksum.h
cipso_ipv4.h
doc: Update the email address for Paul Moore in various source files
2011-08-01 17:58:33 -07:00
cls_cgroup.h
compat.h
net: Add sendmmsg socket system call
2011-05-05 11:10:14 -07:00
datalink.h
dcbevent.h
dcb: Add stub routines for !CONFIG_DCB
2011-10-06 15:49:51 -04:00
dcbnl.h
dcb: add DCBX mode to event notifier attributes
2011-10-06 15:49:51 -04:00
dn.h
dn_dev.h
dn_fib.h
dn_neigh.h
dn_nsp.h
dn_route.h
dsa.h
dsa: Include linux/if_ether.h to fix build error
2011-12-01 11:41:06 -05:00
dsfield.h
dst.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2011-12-23 17:13:56 -05:00
dst_ops.h
net: Rename the dst_opt default_mtu method to mtu
2011-11-26 14:29:50 -05:00
esp.h
ethoc.h
fib_rules.h
flow.h
net: fix some sparse errors
2012-01-17 10:31:12 -05:00
flow_keys.h
flow_dissector: use a 64bit load/store
2011-11-29 13:17:03 -05:00
garp.h
garp: remove last synchronize_rcu() call
2011-05-12 17:46:56 -04:00
gen_stats.h
genetlink.h
genetlink: Add genl_notify()
2011-12-03 09:35:05 -08:00
gre.h
icmp.h
ipv4: reduce percpu needs for icmpmsg mibs
2011-11-09 16:04:20 -05:00
ieee80211_radiotap.h
wireless: move ieee80211chan2mhz macro
2011-11-11 12:32:50 -05:00
ieee802154.h
6LoWPAN: add fragmentation support
2011-11-14 00:19:42 -05:00
ieee802154_netdev.h
if_inet6.h
ipv6: updates to privacy addresses per RFC 4941.
2011-08-01 18:05:00 -07:00
inet6_connection_sock.h
inet: Pass flowi to ->queue_xmit().
2011-05-08 15:28:28 -07:00
inet6_hashtables.h
net: use IS_ENABLED(CONFIG_IPV6)
2011-12-11 18:25:16 -05:00
inet_common.h
inet_connection_sock.h
net: rename sk_clone to sk_clone_lock
2011-11-08 17:07:07 -05:00
inet_ecn.h
inet: add rfc 3168 extract in front of INET_ECN_encapsulate()
2011-10-22 01:25:23 -04:00
inet_frag.h
inet_hashtables.h
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
inet_sock.h
net: use IS_ENABLED(CONFIG_IPV6)
2011-12-11 18:25:16 -05:00
inet_timewait_sock.h
inet: remove rcu protection on tw_net
2011-12-14 13:34:55 -05:00
inetpeer.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2011-12-02 13:49:21 -05:00
ip.h
net: use IS_ENABLED(CONFIG_IPV6)
2011-12-11 18:25:16 -05:00
ip6_checksum.h
ip6_fib.h
IPv6: Avoid taking write lock for /proc/net/ipv6_route
2011-12-30 17:07:33 -05:00
ip6_route.h
Merge branch 'nf-next' of git://1984.lsi.us.es/net-next
2011-12-25 02:21:45 -05:00
ip6_tunnel.h
ip_fib.h
ipv4: Call fib_select_default() only when actually necessary.
2011-04-14 15:05:22 -07:00
ip_vs.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2012-01-02 18:56:49 -05:00
ipcomp.h
ipconfig.h
ipip.h
ipv6.h
ipv6: Add fragment reporting to ipv6_skip_exthdr().
2011-12-03 09:35:10 -08:00
ipx.h
net: Remove __KERNEL__ cpp checks from include/net
2011-04-24 10:54:56 -07:00
iw_handler.h
lapb.h
wan: make LAPB callbacks const
2011-09-16 19:20:20 -04:00
lib80211.h
include: replace linux/module.h with "struct module" wherever possible
2011-10-31 19:32:32 -04:00
llc.h
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
llc_c_ac.h
llc_c_ev.h
llc_c_st.h
llc_conn.h
llc_if.h
llc_pdu.h
bonding,llc: Fix structure sizeof incompatibility for some PDUs
2011-05-13 15:13:24 -04:00
llc_s_ac.h
llc_s_ev.h
llc_s_st.h
llc_sap.h
mac80211.h
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
2012-01-08 13:21:22 -08:00
mip6.h
mld.h
ndisc.h
ipv6: Create fast inline ipv6 neigh lookup just like ipv4.
2011-12-28 15:41:23 -05:00
neighbour.h
ipv6: Use universal hash for NDISC.
2011-12-28 15:06:58 -05:00
net_namespace.h
net: use IS_ENABLED(CONFIG_IPV6)
2011-12-11 18:25:16 -05:00
net_ratelimit.h
net: Kill ratelimit.h dependency in linux/net.h
2011-05-27 13:41:33 -04:00
netdma.h
netevent.h
net: Remove __KERNEL__ cpp checks from include/net
2011-04-24 10:54:56 -07:00
netlabel.h
doc: Update the email address for Paul Moore in various source files
2011-08-01 17:58:33 -07:00
netlink.h
netlink: clarify attribute length check documentation
2011-11-04 17:48:23 -04:00
netprio_cgroup.h
netprio_cgroup: Fix build break
2011-11-23 15:52:58 -05:00
netrom.h
nexthop.h
nl802154.h
p8022.h
ping.h
net: ping: fix build failure
2011-05-17 14:16:58 -04:00
pkt_cls.h
pkt_sched.h
net: sched: constify tcf_proto and tc_action
2011-07-06 02:52:16 -07:00
protocol.h
net: use IS_ENABLED(CONFIG_IPV6)
2011-12-11 18:25:16 -05:00
psnap.h
raw.h
rawv6.h
net: Remove __KERNEL__ cpp checks from include/net
2011-04-24 10:54:56 -07:00
red.h
net_sched: sfq: add optional RED on top of SFQ
2012-01-12 20:05:28 -08:00
regulatory.h
cfg80211: pass DFS region to drivers through reg_notifier()
2011-11-21 16:20:41 -05:00
request_sock.h
tcp: Change possible SYN flooding messages
2011-09-15 14:49:43 -04:00
rose.h
route.h
route: struct rtable can be const in rt_is_input_route and rt_is_output_route
2011-11-26 14:29:51 -05:00
rtnetlink.h
rtnetlink: Compute and store minimum ifinfo dump size
2011-06-09 20:38:07 -07:00
sch_generic.h
net: sch_generic remove redundant use of <linux/module.h>
2011-10-31 19:32:25 -04:00
scm.h
af_unix: dont send SCM_CREDENTIALS by default
2011-09-28 13:29:50 -04:00
secure_seq.h
tcp: add const qualifiers where possible
2011-10-21 05:22:42 -04:00
slhc_vj.h
snmp.h
Merge branch 'for-3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2012-01-09 13:08:28 -08:00
sock.h
net: introduce res_counter_charge_nofail() for socket allocations
2012-01-22 15:08:46 -05:00
stp.h
tcp.h
tcp: Replace constants with #define macros
2011-12-21 01:03:23 -05:00
tcp_memcontrol.h
tcp buffer limitation: per-cgroup limit
2011-12-12 19:04:11 -05:00
tcp_states.h
timewait_sock.h
transp_v6.h
net: relax PKTINFO non local ipv6 udp xmit check
2011-08-30 17:39:01 -04:00
udp.h
net: use IS_ENABLED(CONFIG_IPV6)
2011-12-11 18:25:16 -05:00
udplite.h
udplite: fast-path computation of checksum coverage
2011-10-17 19:07:30 -04:00
wext.h
wimax.h
net: wimax: Remove of unused 'rfkill_input' pointer
2011-06-24 17:50:44 -07:00
wpan-phy.h
x25.h
x25device.h
xfrm.h
net: remove ipv6_addr_copy()
2011-11-22 16:43:32 -05:00