Skip to content

Commit

Permalink
tracing/uprobes: Add busy check when cleanup all uprobes
Browse files Browse the repository at this point in the history
Add a busy check loop in cleanup_all_probes() before
trying to remove all events in uprobe_events, the same way
that kprobe_events does.

Without this change, writing null to uprobe_events will
try to remove events but if one of them is enabled, it will
stop there leaving some events cleared and others not clceared.

With this change, writing null to uprobe_events makes
sure all events are not enabled before removing events.
So, it clears all events, or returns an error (-EBUSY)
with keeping all events.

Link: http://lkml.kernel.org/r/154140841557.17322.12653952888762532401.stgit@devbox

Reviewed-by: Tom Zanussi <tom.zanussi@linux.intel.com>
Tested-by: Tom Zanussi <tom.zanussi@linux.intel.com>
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
  • Loading branch information
Masami Hiramatsu authored and Steven Rostedt (VMware) committed Dec 9, 2018
1 parent a7b1d74 commit 547cd9e
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions kernel/trace/trace_uprobe.c
Original file line number Diff line number Diff line change
Expand Up @@ -587,12 +587,19 @@ static int cleanup_all_probes(void)
int ret = 0;

mutex_lock(&uprobe_lock);
/* Ensure no probe is in use. */
list_for_each_entry(tu, &uprobe_list, list)
if (trace_probe_is_enabled(&tu->tp)) {
ret = -EBUSY;
goto end;
}
while (!list_empty(&uprobe_list)) {
tu = list_entry(uprobe_list.next, struct trace_uprobe, list);
ret = unregister_trace_uprobe(tu);
if (ret)
break;
}
end:
mutex_unlock(&uprobe_lock);
return ret;
}
Expand Down

0 comments on commit 547cd9e

Please sign in to comment.