int tcp_init_cgroup(struct mem_cgroup *memcg, struct cgroup_subsys *ss) { /* * The root cgroup does not use res_counters, but rather, * rely on the data already collected by the network * subsystem */ struct res_counter *res_parent = NULL; struct cg_proto *cg_proto, *parent_cg; struct mem_cgroup *parent = parent_mem_cgroup(memcg); cg_proto = tcp_prot.proto_cgroup(memcg); if (!cg_proto) return 0; cg_proto->sysctl_mem[0] = sysctl_tcp_mem[0]; cg_proto->sysctl_mem[1] = sysctl_tcp_mem[1]; cg_proto->sysctl_mem[2] = sysctl_tcp_mem[2]; cg_proto->memory_pressure = 0; cg_proto->memcg = memcg; parent_cg = tcp_prot.proto_cgroup(parent); if (parent_cg) res_parent = &parent_cg->memory_allocated; res_counter_init(&cg_proto->memory_allocated, res_parent); percpu_counter_init(&cg_proto->sockets_allocated, 0); return 0; }
static struct vmpressure *vmpressure_parent(struct vmpressure *vmpr) { struct cgroup_subsys_state *css = vmpressure_to_css(vmpr); struct mem_cgroup *memcg = mem_cgroup_from_css(css); memcg = parent_mem_cgroup(memcg); if (!memcg) return NULL; return memcg_to_vmpressure(memcg); }
static struct vmpressure *vmpressure_parent(struct vmpressure *vmpr) { struct cgroup *cg = vmpressure_to_css(vmpr)->cgroup; struct mem_cgroup *memcg = mem_cgroup_from_cont(cg); memcg = parent_mem_cgroup(memcg); if (!memcg) return NULL; return memcg_to_vmpressure(memcg); }
int tcp_init_cgroup(struct cgroup *cgrp, struct cgroup_subsys *ss) { /* * The root cgroup does not use res_counters, but rather, * rely on the data already collected by the network * subsystem */ struct res_counter *res_parent = NULL; struct cg_proto *cg_proto, *parent_cg; struct tcp_memcontrol *tcp; struct mem_cgroup *memcg = mem_cgroup_from_cont(cgrp); struct mem_cgroup *parent = parent_mem_cgroup(memcg); struct net *net = current->nsproxy->net_ns; cg_proto = tcp_prot.proto_cgroup(memcg); if (!cg_proto) goto create_files; tcp = tcp_from_cgproto(cg_proto); tcp->tcp_prot_mem[0] = net->ipv4.sysctl_tcp_mem[0]; tcp->tcp_prot_mem[1] = net->ipv4.sysctl_tcp_mem[1]; tcp->tcp_prot_mem[2] = net->ipv4.sysctl_tcp_mem[2]; tcp->tcp_memory_pressure = 0; parent_cg = tcp_prot.proto_cgroup(parent); if (parent_cg) res_parent = parent_cg->memory_allocated; res_counter_init(&tcp->tcp_memory_allocated, res_parent); percpu_counter_init(&tcp->tcp_sockets_allocated, 0); cg_proto->enter_memory_pressure = memcg_tcp_enter_memory_pressure; cg_proto->memory_pressure = &tcp->tcp_memory_pressure; cg_proto->sysctl_mem = tcp->tcp_prot_mem; cg_proto->memory_allocated = &tcp->tcp_memory_allocated; cg_proto->sockets_allocated = &tcp->tcp_sockets_allocated; cg_proto->memcg = memcg; create_files: return cgroup_add_files(cgrp, ss, tcp_files, ARRAY_SIZE(tcp_files)); }