On 07/01, Andrii Nakryiko wrote: > > --- a/include/linux/uprobes.h > +++ b/include/linux/uprobes.h > @@ -42,6 +42,11 @@ struct uprobe_consumer { > enum uprobe_filter_ctx ctx, > struct mm_struct *mm); > > + /* associated file offset of this probe */ > + loff_t offset; > + /* associated refctr file offset of this probe, or zero */ > + loff_t ref_ctr_offset; > + /* for internal uprobe infra use, consumers shouldn't touch fields below */ > struct uprobe_consumer *next; Well, I don't really like this patch either... If nothing else because all the consumers in uprobe->consumers list must have the same offset/ref_ctr_offset. -------------------------------------------------------------------------- But I agree, the ugly uprobe_register_refctr() must die, we need a single function int uprobe_register(inode, offset, ref_ctr_offset, consumer); This change is trivial. -------------------------------------------------------------------------- And speaking of cleanups, I think another change makes sense: - int uprobe_register(...); + struct uprobe* uprobe_register(...); so that uprobe_register() returns uprobe or ERR_PTR. - void uprobe_unregister(inode, offset, consumer); + void uprobe_unregister(uprobe, consumer); this way unregister() doesn't need the extra find_uprobe() + put_uprobe(). The same for uprobe_apply(). The necessary changes in kernel/trace/trace_uprobe.c are trivial, we just need to change struct trace_uprobe - struct inode *inode; + struct uprobe *uprobe; and fix the compilation errors. As for kernel/trace/bpf_trace.c, I guess struct bpf_uprobe needs the new ->uprobe member, we can't kill bpf_uprobe->offset because of bpf_uprobe_multi_link_fill_link_info(), but I think this is not that bad. What do you think? Oleg.