1d62e43657
The only reason cgroup was used, was to be consistent with the populate() interface. Now that we're getting rid of it, not only we no longer need it, but we also *can't* call it this way. Since we will no longer rely on populate(), this will be called from create(). During create, the association between struct mem_cgroup and struct cgroup does not yet exist, since cgroup internals hasn't yet initialized its bookkeeping. This means we would not be able to draw the memcg pointer from the cgroup pointer in these functions, which is highly undesirable. Signed-off-by: Glauber Costa <glommer@parallels.com> Acked-by: Kamezawa Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Signed-off-by: Tejun Heo <tj@kernel.org> CC: Li Zefan <lizefan@huawei.com> CC: Johannes Weiner <hannes@cmpxchg.org> CC: Michal Hocko <mhocko@suse.cz>
20 lines
677 B
C
20 lines
677 B
C
#ifndef _TCP_MEMCG_H
|
|
#define _TCP_MEMCG_H
|
|
|
|
struct tcp_memcontrol {
|
|
struct cg_proto cg_proto;
|
|
/* per-cgroup tcp memory pressure knobs */
|
|
struct res_counter tcp_memory_allocated;
|
|
struct percpu_counter tcp_sockets_allocated;
|
|
/* those two are read-mostly, leave them at the end */
|
|
long tcp_prot_mem[3];
|
|
int tcp_memory_pressure;
|
|
};
|
|
|
|
struct cg_proto *tcp_proto_cgroup(struct mem_cgroup *memcg);
|
|
int tcp_init_cgroup(struct mem_cgroup *memcg, struct cgroup_subsys *ss);
|
|
void tcp_destroy_cgroup(struct mem_cgroup *memcg);
|
|
unsigned long long tcp_max_memory(const struct mem_cgroup *memcg);
|
|
void tcp_prot_mem(struct mem_cgroup *memcg, long val, int idx);
|
|
#endif /* _TCP_MEMCG_H */
|