Message ID | 20230504031513.13749-2-zhoufeng.zf@bytedance.com |
---|---|
State | Superseded |
Headers | show |
Series | Introduce a new kfunc of bpf_task_under_cgroup | expand |
On 5/3/23 8:15 PM, Feng zhou wrote: > From: Feng Zhou <zhoufeng.zf@bytedance.com> > > Add a kfunc that's similar to the bpf_current_task_under_cgroup. > The difference is that it is a designated task. > > When hook sched related functions, sometimes it is necessary to > specify a task instead of the current task. > > Signed-off-by: Feng Zhou <zhoufeng.zf@bytedance.com> You can carry my Ack from previous revision since there is no change to the patch. Acked-by: Yonghong Song <yhs@fb.com>
在 2023/5/4 22:29, Yonghong Song 写道: > > > On 5/3/23 8:15 PM, Feng zhou wrote: >> From: Feng Zhou <zhoufeng.zf@bytedance.com> >> >> Add a kfunc that's similar to the bpf_current_task_under_cgroup. >> The difference is that it is a designated task. >> >> When hook sched related functions, sometimes it is necessary to >> specify a task instead of the current task. >> >> Signed-off-by: Feng Zhou <zhoufeng.zf@bytedance.com> > > You can carry my Ack from previous revision since there > is no change to the patch. > > Acked-by: Yonghong Song <yhs@fb.com> Will do
diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c index bb6b4637ebf2..453cbd312366 100644 --- a/kernel/bpf/helpers.c +++ b/kernel/bpf/helpers.c @@ -2149,6 +2149,25 @@ __bpf_kfunc struct cgroup *bpf_cgroup_from_id(u64 cgid) return NULL; return cgrp; } + +/** + * bpf_task_under_cgroup - wrap task_under_cgroup_hierarchy() as a kfunc, test + * task's membership of cgroup ancestry. + * @task: the task to be tested + * @ancestor: possible ancestor of @task's cgroup + * + * Tests whether @task's default cgroup hierarchy is a descendant of @ancestor. + * It follows all the same rules as cgroup_is_descendant, and only applies + * to the default hierarchy. + */ +__bpf_kfunc long bpf_task_under_cgroup(struct task_struct *task, + struct cgroup *ancestor) +{ + if (unlikely(!ancestor || !task)) + return -EINVAL; + + return task_under_cgroup_hierarchy(task, ancestor); +} #endif /* CONFIG_CGROUPS */ /** @@ -2400,6 +2419,7 @@ BTF_ID_FLAGS(func, bpf_cgroup_acquire, KF_ACQUIRE | KF_RCU | KF_RET_NULL) BTF_ID_FLAGS(func, bpf_cgroup_release, KF_RELEASE) BTF_ID_FLAGS(func, bpf_cgroup_ancestor, KF_ACQUIRE | KF_RCU | KF_RET_NULL) BTF_ID_FLAGS(func, bpf_cgroup_from_id, KF_ACQUIRE | KF_RET_NULL) +BTF_ID_FLAGS(func, bpf_task_under_cgroup, KF_RCU) #endif BTF_ID_FLAGS(func, bpf_task_from_pid, KF_ACQUIRE | KF_RET_NULL) BTF_SET8_END(generic_btf_ids)