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;

Reply via email to