On Fri, Aug 19, 2022 at 11:18 AM Martin KaFai Lau <kafai@xxxxxx> wrote: > > On Thu, Aug 18, 2022 at 04:27:25PM -0700, Stanislav Fomichev wrote: > > +BPF_CALL_0(bpf_get_current_cgroup_id) > > +{ > > + struct cgroup *cgrp; > > + u64 cgrp_id; > > + > > + rcu_read_lock(); > > + cgrp = task_dfl_cgroup(current); > > + cgrp_id = cgroup_id(cgrp); > > + rcu_read_unlock(); > > + > > + return cgrp_id; > > +} > > + > > +const struct bpf_func_proto bpf_get_current_cgroup_id_proto = { > > + .func = bpf_get_current_cgroup_id, > > + .gpl_only = false, > > + .ret_type = RET_INTEGER, > > +}; > > + > > +BPF_CALL_1(bpf_get_current_ancestor_cgroup_id, int, ancestor_level) > > +{ > > + struct cgroup *cgrp; > > + struct cgroup *ancestor; > > + u64 cgrp_id; > > + > > + rcu_read_lock(); > > + cgrp = task_dfl_cgroup(current); > > + ancestor = cgroup_ancestor(cgrp, ancestor_level); > > + cgrp_id = ancestor ? cgroup_id(ancestor) : 0; > > + rcu_read_unlock(); > > + > > + return cgrp_id; > > +} > > + > > +const struct bpf_func_proto bpf_get_current_ancestor_cgroup_id_proto = { > > + .func = bpf_get_current_ancestor_cgroup_id, > > + .gpl_only = false, > > + .ret_type = RET_INTEGER, > > + .arg1_type = ARG_ANYTHING, > > +}; > The bpf_get_current_cgroup_id_proto and > bpf_get_current_ancestor_cgroup_id_proto should stay at helpers.c. > Otherwise, those non cgroup hooks will have issue (eg. bpf_trace.c) > when CONFIG_CGROUP_BPF not set. Oh, good point on bpf_trace.c, will keep in helpers.c I'm now a bit surprised I haven't seen a build failure :-/ Thank you for the review! Will address your other point and resend. > May be in the future cgroup_current_func_proto() can be re-used for non > cgroup hooks. > > > +#ifdef CONFIG_CGROUP_NET_CLASSID > > +BPF_CALL_0(bpf_get_cgroup_classid_curr) > > +{ > > + return __task_get_classid(current); > > +} > > + > > +const struct bpf_func_proto bpf_get_cgroup_classid_curr_proto = { > > + .func = bpf_get_cgroup_classid_curr, > > + .gpl_only = false, > > + .ret_type = RET_INTEGER, > > +}; > > +#endif > Same for this one. eg. sk_msg needs it. probably stay in filter.c as-is.