diff options
Diffstat (limited to 'kernel/cgroup/cgroup.c')
-rw-r--r-- | kernel/cgroup/cgroup.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index 217cec4e22c6..ef9cfbfc82a9 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c | |||
@@ -4955,8 +4955,6 @@ static void css_release_work_fn(struct work_struct *work) | |||
4955 | if (cgrp->kn) | 4955 | if (cgrp->kn) |
4956 | RCU_INIT_POINTER(*(void __rcu __force **)&cgrp->kn->priv, | 4956 | RCU_INIT_POINTER(*(void __rcu __force **)&cgrp->kn->priv, |
4957 | NULL); | 4957 | NULL); |
4958 | |||
4959 | cgroup_bpf_put(cgrp); | ||
4960 | } | 4958 | } |
4961 | 4959 | ||
4962 | mutex_unlock(&cgroup_mutex); | 4960 | mutex_unlock(&cgroup_mutex); |
@@ -5482,6 +5480,8 @@ static int cgroup_destroy_locked(struct cgroup *cgrp) | |||
5482 | 5480 | ||
5483 | cgroup1_check_for_release(parent); | 5481 | cgroup1_check_for_release(parent); |
5484 | 5482 | ||
5483 | cgroup_bpf_offline(cgrp); | ||
5484 | |||
5485 | /* put the base reference */ | 5485 | /* put the base reference */ |
5486 | percpu_ref_kill(&cgrp->self.refcnt); | 5486 | percpu_ref_kill(&cgrp->self.refcnt); |
5487 | 5487 | ||
@@ -6221,6 +6221,7 @@ void cgroup_sk_alloc(struct sock_cgroup_data *skcd) | |||
6221 | * Don't use cgroup_get_live(). | 6221 | * Don't use cgroup_get_live(). |
6222 | */ | 6222 | */ |
6223 | cgroup_get(sock_cgroup_ptr(skcd)); | 6223 | cgroup_get(sock_cgroup_ptr(skcd)); |
6224 | cgroup_bpf_get(sock_cgroup_ptr(skcd)); | ||
6224 | return; | 6225 | return; |
6225 | } | 6226 | } |
6226 | 6227 | ||
@@ -6232,6 +6233,7 @@ void cgroup_sk_alloc(struct sock_cgroup_data *skcd) | |||
6232 | cset = task_css_set(current); | 6233 | cset = task_css_set(current); |
6233 | if (likely(cgroup_tryget(cset->dfl_cgrp))) { | 6234 | if (likely(cgroup_tryget(cset->dfl_cgrp))) { |
6234 | skcd->val = (unsigned long)cset->dfl_cgrp; | 6235 | skcd->val = (unsigned long)cset->dfl_cgrp; |
6236 | cgroup_bpf_get(cset->dfl_cgrp); | ||
6235 | break; | 6237 | break; |
6236 | } | 6238 | } |
6237 | cpu_relax(); | 6239 | cpu_relax(); |
@@ -6242,7 +6244,10 @@ void cgroup_sk_alloc(struct sock_cgroup_data *skcd) | |||
6242 | 6244 | ||
6243 | void cgroup_sk_free(struct sock_cgroup_data *skcd) | 6245 | void cgroup_sk_free(struct sock_cgroup_data *skcd) |
6244 | { | 6246 | { |
6245 | cgroup_put(sock_cgroup_ptr(skcd)); | 6247 | struct cgroup *cgrp = sock_cgroup_ptr(skcd); |
6248 | |||
6249 | cgroup_bpf_put(cgrp); | ||
6250 | cgroup_put(cgrp); | ||
6246 | } | 6251 | } |
6247 | 6252 | ||
6248 | #endif /* CONFIG_SOCK_CGROUP_DATA */ | 6253 | #endif /* CONFIG_SOCK_CGROUP_DATA */ |