Glauber Costa
3f13461939
memcg: decrement static keys at real destroy time
...
We call the destroy function when a cgroup starts to be removed, such as
by a rmdir event.
However, because of our reference counters, some objects are still
inflight. Right now, we are decrementing the static_keys at destroy()
time, meaning that if we get rid of the last static_key reference, some
objects will still have charges, but the code to properly uncharge them
won't be run.
This becomes a problem specially if it is ever enabled again, because now
new charges will be added to the staled charges making keeping it pretty
much impossible.
We just need to be careful with the static branch activation: since there
is no particular preferred order of their activation, we need to make sure
that we only start using it after all call sites are active. This is
achieved by having a per-memcg flag that is only updated after
static_key_slow_inc() returns. At this time, we are sure all sites are
active.
This is made per-memcg, not global, for a reason: it also has the effect
of making socket accounting more consistent. The first memcg to be
limited will trigger static_key() activation, therefore, accounting. But
all the others will then be accounted no matter what. After this patch,
only limited memcgs will have its sockets accounted.
[akpm@linux-foundation.org: move enum sock_flag_bits into sock.h,
document enum sock_flag_bits,
convert memcg_proto_active() and memcg_proto_activated() to test_bit(),
redo tcp_update_limit() comment to 80 cols]
Signed-off-by: Glauber Costa <glommer@parallels.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Li Zefan <lizefan@huawei.com>
Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@suse.cz>
Acked-by: David Miller <davem@davemloft.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-05-29 16:22:28 -07:00
..
9p
9p: Reduce object size with CONFIG_NET_9P_DEBUG
2012-01-05 10:51:44 -06:00
bluetooth
Bluetooth: Create flags for bt_sk()
2012-05-16 16:14:17 -03:00
caif
caif-hsi: robust frame aggregation for HSI
2012-04-13 11:37:36 -04:00
irda
iucv
af_iucv: add shutdown for HS transport
2012-03-07 22:52:24 -08:00
netfilter
netfilter: nf_conntrack: use this_cpu_inc()
2012-05-08 19:36:33 +02:00
netns
netfilter: nf_ct_helper: allow to disable automatic helper assignment
2012-05-08 19:35:18 +02:00
nfc
NFC: HCI drivers don't have to keep track of polling state
2012-05-15 17:31:22 -04:00
phonet
sctp
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2012-05-16 22:17:37 -04:00
tc_act
act_api.h
addrconf.h
ipv6: bool/const conversions phase2
2012-05-19 01:08:16 -04:00
af_ieee802154.h
af_rxrpc.h
af_unix.h
net: cleanup unsigned to unsigned int
2012-04-15 12:44:40 -04:00
ah.h
arp.h
ipv4: Eliminate spurious argument to __ipv4_neigh_lookup
2012-02-15 17:48:35 -05:00
atmclip.h
ax25.h
net ax25: Fix the build when sysctl support is disabled.
2012-04-23 22:14:47 -04:00
ax88796.h
cfg80211-wext.h
cfg80211.h
cfg80211: fix cfg80211_can_beacon_sec_chan prototype
2012-05-16 13:08:15 -04:00
checksum.h
cipso_ipv4.h
cls_cgroup.h
codel.h
fq_codel: should use qdisc backlog as threshold
2012-05-16 15:30:26 -04:00
compat.h
net: cleanup unsigned to unsigned int
2012-04-15 12:44:40 -04:00
datalink.h
dcbevent.h
dcbnl.h
net/dcb: Add an optional max rate attribute
2012-04-05 05:08:04 -04:00
dn.h
net: cleanup unsigned to unsigned int
2012-04-15 12:44:40 -04:00
dn_dev.h
dn_fib.h
net: cleanup unsigned to unsigned int
2012-04-15 12:44:40 -04:00
dn_neigh.h
dn_nsp.h
dn_route.h
net: cleanup unsigned to unsigned int
2012-04-15 12:44:40 -04:00
dsa.h
dsfield.h
dst.h
set fake_rtable's dst to NULL to avoid kernel Oops
2012-04-24 00:16:24 -04:00
dst_ops.h
net: cleanup unsigned to unsigned int
2012-04-15 12:44:40 -04:00
esp.h
ethoc.h
fib_rules.h
flow.h
ipv4: reset flowi parameters on route connect
2012-02-04 19:29:48 -05:00
flow_keys.h
garp.h
gen_stats.h
genetlink.h
net: Deinline __nlmsg_put and genlmsg_put. -7k code on i386 defconfig.
2012-01-30 15:22:06 -05:00
gre.h
icmp.h
net: cleanup unsigned to unsigned int
2012-04-15 12:44:40 -04:00
ieee80211_radiotap.h
ieee802154.h
ieee802154_netdev.h
mac802154: declare reduced mlme operations
2012-05-16 15:16:56 -04:00
if_inet6.h
net: delete all instances of special processing for token ring
2012-05-15 20:14:35 -04:00
inet6_connection_sock.h
tcp: bind() use stronger condition for bind_conflict
2012-04-14 15:28:55 -04:00
inet6_hashtables.h
inet_common.h
inet_connection_sock.h
ipv6: RTAX_FEATURE_ALLFRAG causes inefficient TCP segment sizing
2012-04-27 00:03:34 -04:00
inet_ecn.h
inet_frag.h
ip_frag: struct inet_frags match() method returns a bool
2012-05-18 01:40:27 -04:00
inet_hashtables.h
inet_sock.h
net: implement IP_RECVTOS for IP_PKTOPTIONS
2012-02-13 00:46:41 -05:00
inet_timewait_sock.h
inetpeer.h
route: Remove redirect_genid
2012-03-08 00:30:32 -08:00
ip.h
net: delete all instances of special processing for token ring
2012-05-15 20:14:35 -04:00
ip6_checksum.h
ip6_fib.h
ipv6: clean up rt6_clean_expires
2012-04-17 22:31:59 -04:00
ip6_route.h
ipv6: bool/const conversions phase2
2012-05-19 01:08:16 -04:00
ip6_tunnel.h
ip_fib.h
net: cleanup unsigned to unsigned int
2012-04-15 12:44:40 -04:00
ip_vs.h
ipvs: add support for sync threads
2012-05-08 19:40:33 +02:00
ipcomp.h
ipconfig.h
ipip.h
tunnel: implement 64 bits statistics
2012-04-14 14:47:05 -04:00
ipv6.h
ipv6: bool/const conversions phase2
2012-05-19 01:08:16 -04:00
ipx.h
iw_handler.h
lapb.h
lapb: Neaten debugging
2012-05-17 18:45:20 -04:00
lib80211.h
llc.h
llc_c_ac.h
llc_c_ev.h
net: cleanup unsigned to unsigned int
2012-04-15 12:44:40 -04:00
llc_c_st.h
llc_conn.h
llc_if.h
llc_pdu.h
net: delete all instances of special processing for token ring
2012-05-15 20:14:35 -04:00
llc_s_ac.h
llc_s_ev.h
llc_s_st.h
llc_sap.h
mac80211.h
mac80211: (selectively) add HT details in radiotap
2012-05-16 12:46:38 -04:00
mac802154.h
mac802154: RX data path
2012-05-16 15:16:44 -04:00
mip6.h
mld.h
ndisc.h
Treat ND option 31 as userland (DNSSL support)
2012-04-12 15:56:57 -04:00
neighbour.h
net: cleanup unsigned to unsigned int
2012-04-15 12:44:40 -04:00
net_namespace.h
net sysctl: Add place holder functions for when sysctl support is compiled out of the kernel.
2012-04-23 19:24:28 -04:00
net_ratelimit.h
netdma.h
netevent.h
netlabel.h
netlink.h
netlink: Delete all NLA_PUT*() macros.
2012-04-02 04:33:45 -04:00
netprio_cgroup.h
netprio_cgroup: fix wrong memory access when NETPRIO_CGROUP=m
2012-02-10 15:08:57 -05:00
netrom.h
nexthop.h
nl802154.h
p8022.h
ping.h
pkt_cls.h
pkt_sched.h
net: cleanup unsigned to unsigned int
2012-04-15 12:44:40 -04:00
protocol.h
psnap.h
raw.h
rawv6.h
ipv6: bool/const conversions phase2
2012-05-19 01:08:16 -04:00
red.h
net_sched: red: Make minor corrections to comments
2012-04-16 23:53:11 -04:00
regulatory.h
request_sock.h
rose.h
route.h
net: cleanup unsigned to unsigned int
2012-04-15 12:44:40 -04:00
rtnetlink.h
rtnetlink: ops->get_tx_queue() cannot take a const 'tb'.
2012-04-13 14:21:04 -04:00
sch_generic.h
net: Make qdisc_skb_cb upper size bound explicit.
2012-02-09 13:50:34 -05:00
scm.h
secure_seq.h
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
memcg: decrement static keys at real destroy time
2012-05-29 16:22:28 -07:00
stp.h
tcp.h
tcp: bool conversions
2012-05-17 14:59:59 -04:00
tcp_memcontrol.h
cgroup: pass struct mem_cgroup instead of struct cgroup to socket memcg
2012-04-10 10:04:07 -07:00
tcp_states.h
timewait_sock.h
BUG: headers with BUG/BUG_ON etc. need linux/bug.h
2012-03-04 17:54:34 -05:00
transp_v6.h
udp.h
net/ipv6/udp: UDP encapsulation: introduce encap_rcv hook into IPv6
2012-04-28 22:21:51 -04:00
udplite.h
net: ipv4: Standardize prefixes for message logging
2012-03-12 17:05:21 -07:00
wext.h
wimax.h
net: cleanup unsigned to unsigned int
2012-04-15 12:44:40 -04:00
wpan-phy.h
mac802154: monitor device support
2012-05-16 15:17:08 -04:00
x25.h
net: cleanup unsigned to unsigned int
2012-04-15 12:44:40 -04:00
x25device.h
xfrm.h
xfrm: Convert several xfrm policy match functions to bool.
2012-05-15 15:04:57 -04:00