On Mon, 14 Oct 2019 12:59:23 +0200 Miroslav Benes <mbe...@suse.cz> wrote:
> int > ftrace_enable_sysctl(struct ctl_table *table, int write, > void __user *buffer, size_t *lenp, > @@ -6740,8 +6754,6 @@ ftrace_enable_sysctl(struct ctl_table *table, int write, > if (ret || !write || (last_ftrace_enabled == !!ftrace_enabled)) > goto out; > > - last_ftrace_enabled = !!ftrace_enabled; > - > if (ftrace_enabled) { > > /* we are starting ftrace again */ > @@ -6752,12 +6764,19 @@ ftrace_enable_sysctl(struct ctl_table *table, int > write, > ftrace_startup_sysctl(); > > } else { > + if (is_permanent_ops_registered()) { > + ftrace_enabled = last_ftrace_enabled; Although this is not incorrect, but may be somewhat confusing. At this location, last_ftrace_enabled is always true. I'm thinking this would be better to simply set it to false here. > + ret = -EBUSY; > + goto out; > + } > + > /* stopping ftrace calls (just send to ftrace_stub) */ > ftrace_trace_function = ftrace_stub; > > ftrace_shutdown_sysctl(); > } > > + last_ftrace_enabled = !!ftrace_enabled; > out: And move the assignment of last_ftrace_enabled to after the "out:" label. -- Steve > mutex_unlock(&ftrace_lock); > return ret;