memcg: use css_get() in sock_update_memcg()
Use css_get/css_put instead of mem_cgroup_get/put. Note, if at the same time someone is moving @current to a different cgroup and removing the old cgroup, css_tryget() may return false, and sock->sk_cgrp won't be initialized, which is fine. Signed-off-by: Li Zefan <lizefan@huawei.com> Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Acked-by: Michal Hocko <mhocko@suse.cz> Cc: Hugh Dickins <hughd@google.com> Cc: Tejun Heo <tj@kernel.org> Cc: Glauber Costa <glommer@openvz.org> Cc: Johannes Weiner <hannes@cmpxchg.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
f37a96914d
commit
5347e5ae13
1 changed files with 4 additions and 4 deletions
|
@ -551,15 +551,15 @@ void sock_update_memcg(struct sock *sk)
|
|||
*/
|
||||
if (sk->sk_cgrp) {
|
||||
BUG_ON(mem_cgroup_is_root(sk->sk_cgrp->memcg));
|
||||
mem_cgroup_get(sk->sk_cgrp->memcg);
|
||||
css_get(&sk->sk_cgrp->memcg->css);
|
||||
return;
|
||||
}
|
||||
|
||||
rcu_read_lock();
|
||||
memcg = mem_cgroup_from_task(current);
|
||||
cg_proto = sk->sk_prot->proto_cgroup(memcg);
|
||||
if (!mem_cgroup_is_root(memcg) && memcg_proto_active(cg_proto)) {
|
||||
mem_cgroup_get(memcg);
|
||||
if (!mem_cgroup_is_root(memcg) &&
|
||||
memcg_proto_active(cg_proto) && css_tryget(&memcg->css)) {
|
||||
sk->sk_cgrp = cg_proto;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
@ -573,7 +573,7 @@ void sock_release_memcg(struct sock *sk)
|
|||
struct mem_cgroup *memcg;
|
||||
WARN_ON(!sk->sk_cgrp->memcg);
|
||||
memcg = sk->sk_cgrp->memcg;
|
||||
mem_cgroup_put(memcg);
|
||||
css_put(&sk->sk_cgrp->memcg->css);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue