On Fri, 2024-10-04 at 12:33 -0700, Alexei Starovoitov wrote: [...] > so 1 - initial state > 2,3,.. - prog in prog_array > 0 - prog was extended. This sounds interesting, but need to think a bit. > If == 0 -> cannot add to prog_array > if > 1 -> cannot freplace. > > but it's too clever. > It's better to use mutex and keep bool + count, > but extra mutex is unnecessary. > Reuse prog->aux->dst_mutex. > Grab it prog_fd_array_get_ptr() and do the check and cnt++ I think it is not possible to grab the correct mutex in prog_fd_array_get_ptr(). bpf_tracing_prog_attach() operates on two programs: - one named 'prog' is the freplace program; - another named 'tgt_prog' is the program to attach 'prog' to. bpf_tracing_prog_attach() grabs prog->aux->dst_mutex. Inside prog_fd_array_get_ptr() there is only a pointer to program being put into array, potential target of the freplace.