On Tue, Dec 10, 2019 at 06:33:27PM -0800, Andrey Ignatov wrote: > __cgroup_bpf_attach has a lot of identical code to handle two scenarios: > BPF_F_ALLOW_MULTI is set and unset. > > Simplify it by splitting the two main steps: > > * First, the decision is made whether a new bpf_prog_list entry should > be allocated or existing entry should be reused for the new program. > This decision is saved in replace_pl pointer; > > * Next, replace_pl pointer is used to handle both possible states of > BPF_F_ALLOW_MULTI flag (set / unset) instead of doing similar work for > them separately. > > This splitting, in turn, allows to make further simplifications: > > * The check for attaching same program twice in BPF_F_ALLOW_MULTI mode > can be done before allocating cgroup storage, so that if user tries to > attach same program twice no alloc/free happens as it was before; > > * pl_was_allocated becomes redundant so it's removed. Acked-by: Martin KaFai Lau <kafai@xxxxxx>