Re: [PATCH for-next v4] cgroup/bpf: fast path skb BPF filtering

From: Martin KaFai Lau
Date: Thu Jan 27 2022 - 02:01:46 EST


On Wed, Jan 26, 2022 at 09:08:24PM -0800, Alexei Starovoitov wrote:
> On Wed, Jan 26, 2022 at 1:29 PM Pavel Begunkov <asml.silence@xxxxxxxxx> wrote:
> >
> > On 1/26/22 20:30, Martin KaFai Lau wrote:
> > > On Wed, Jan 26, 2022 at 12:22:13AM +0000, Pavel Begunkov wrote:
> > >> #define BPF_CGROUP_RUN_PROG_INET_INGRESS(sk, skb) \
> > >> ({ \
> > >> int __ret = 0; \
> > >> - if (cgroup_bpf_enabled(CGROUP_INET_INGRESS)) \
> > >> + if (cgroup_bpf_enabled(CGROUP_INET_INGRESS) && sk && \
> > > From reading sk_filter_trim_cap() where this will be called, sk cannot be NULL.
> > > If yes, the new sk test is not needed.
> >
> > Well, there is no sane way to verify how it's used considering
> >
> > EXPORT_SYMBOL(__cgroup_bpf_run_filter_skb);
>
> BPF_CGROUP_RUN_PROG_INET_INGRESS() is used in one place.
> Are you folks saying that you want to remove !sk check
> from __cgroup_bpf_run_filter_skb()?
I meant to remove the newly added "&& sk" test in this patch
instead of the existing "!sk" test in __cgroup_bpf_run_filter_skb().
I think it may be where the confusion is.

There is little reason to add a new unnecessary test.

> Seems like micro optimization, but sure why not.
The whole "if (!sk || !sk_fullsock(sk))" test can probably be
removed from __cgroup_bpf_run_filter_skb(). It would be
a nice clean up but I don't think it has to be done together
with this no-bpf-prog to run optimization-patch.