mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 01:53:29 +02:00
uprobes: shift put_uprobe() from delete_uprobe() to uprobe_unregister()
Kill the extra get_uprobe() + put_uprobe() in uprobe_unregister() and move the possibly final put_uprobe() from delete_uprobe() to its only caller, uprobe_unregister(). Signed-off-by: Oleg Nesterov <oleg@redhat.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Jiri Olsa <jolsa@kernel.org> Acked-by: Andrii Nakryiko <andrii@kernel.org> Acked-by: "Masami Hiramatsu (Google)" <mhiramat@kernel.org> Link: https://lore.kernel.org/r/20240801132749.GA8817@redhat.com
This commit is contained in:
parent
70408bebba
commit
12026d2034
|
|
@ -939,7 +939,6 @@ static void delete_uprobe(struct uprobe *uprobe)
|
|||
rb_erase(&uprobe->rb_node, &uprobes_tree);
|
||||
write_unlock(&uprobes_treelock);
|
||||
RB_CLEAR_NODE(&uprobe->rb_node); /* for uprobe_is_active() */
|
||||
put_uprobe(uprobe);
|
||||
}
|
||||
|
||||
struct map_info {
|
||||
|
|
@ -1094,7 +1093,6 @@ void uprobe_unregister(struct uprobe *uprobe, struct uprobe_consumer *uc)
|
|||
{
|
||||
int err;
|
||||
|
||||
get_uprobe(uprobe);
|
||||
down_write(&uprobe->register_rwsem);
|
||||
if (WARN_ON(!consumer_del(uprobe, uc)))
|
||||
err = -ENOENT;
|
||||
|
|
@ -1102,10 +1100,16 @@ void uprobe_unregister(struct uprobe *uprobe, struct uprobe_consumer *uc)
|
|||
err = register_for_each_vma(uprobe, NULL);
|
||||
|
||||
/* TODO : cant unregister? schedule a worker thread */
|
||||
if (!err && !uprobe->consumers)
|
||||
delete_uprobe(uprobe);
|
||||
if (!err) {
|
||||
if (!uprobe->consumers)
|
||||
delete_uprobe(uprobe);
|
||||
else
|
||||
err = -EBUSY;
|
||||
}
|
||||
up_write(&uprobe->register_rwsem);
|
||||
put_uprobe(uprobe);
|
||||
|
||||
if (!err)
|
||||
put_uprobe(uprobe);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(uprobe_unregister);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user