7 #include <linux/module.h>
14 static void memcg_tcp_enter_memory_pressure(
struct sock *
sk)
16 if (sk->
sk_cgrp->memory_pressure)
17 *sk->
sk_cgrp->memory_pressure = 1;
34 cg_proto =
tcp_prot.proto_cgroup(memcg);
38 tcp = tcp_from_cgproto(cg_proto);
45 parent_cg =
tcp_prot.proto_cgroup(parent);
57 cg_proto->
memcg = memcg;
69 cg_proto =
tcp_prot.proto_cgroup(memcg);
73 tcp = tcp_from_cgproto(cg_proto);
89 cg_proto =
tcp_prot.proto_cgroup(memcg);
96 tcp = tcp_from_cgproto(cg_proto);
103 for (i = 0; i < 3; i++)
105 net->
ipv4.sysctl_tcp_mem[i]);
138 static int tcp_cgroup_write(
struct cgroup *
cont,
struct cftype *cft,
142 unsigned long long val;
145 switch (cft->private) {
151 ret = tcp_update_limit(memcg, val);
163 struct cg_proto *cg_proto;
165 cg_proto =
tcp_prot.proto_cgroup(memcg);
169 tcp = tcp_from_cgproto(cg_proto);
176 struct cg_proto *cg_proto;
178 cg_proto =
tcp_prot.proto_cgroup(memcg);
182 tcp = tcp_from_cgproto(cg_proto);
186 static u64 tcp_cgroup_read(
struct cgroup *cont,
struct cftype *cft)
191 switch (cft->private) {
196 val = tcp_read_usage(memcg);
200 val = tcp_read_stat(memcg, cft->private, 0);
208 static int tcp_cgroup_reset(
struct cgroup *cont,
unsigned int event)
212 struct cg_proto *cg_proto;
215 cg_proto =
tcp_prot.proto_cgroup(memcg);
218 tcp = tcp_from_cgproto(cg_proto);
235 struct cg_proto *cg_proto;
241 tcp = tcp_from_cgproto(cg_proto);
248 struct cg_proto *cg_proto;
250 cg_proto =
tcp_prot.proto_cgroup(memcg);
254 tcp = tcp_from_cgproto(cg_proto);
259 static struct cftype tcp_files[] = {
261 .name =
"kmem.tcp.limit_in_bytes",
262 .write_string = tcp_cgroup_write,
263 .read_u64 = tcp_cgroup_read,
267 .name =
"kmem.tcp.usage_in_bytes",
268 .read_u64 = tcp_cgroup_read,
272 .name =
"kmem.tcp.failcnt",
274 .trigger = tcp_cgroup_reset,
275 .read_u64 = tcp_cgroup_read,
278 .name =
"kmem.tcp.max_usage_in_bytes",
280 .trigger = tcp_cgroup_reset,
281 .read_u64 = tcp_cgroup_read,
286 static int __init tcp_memcontrol_init(
void)