Re: [PATCH] tracing - support multiple pids in set_pid_ftrace file

Jiri Olsa
2009-09-15T12:36:40Z

On Tue, Sep 15, 2009 at 05:40:07PM +0800, Li Zefan wrote:
> jolsa@redhat.com wrote:
SNIP

> > + list_for_each_entry_safe(fpid, safe, &ftrace_pids, list) {
> > + struct pid *pid = fpid->pid;
> > +
> > + clear_ftrace_pid_task(&pid);
>
> Now we can change clear_ftrace_pid_task() to take struct pid *
> instead of struct pid**.
>
changed

> > +
> > + if (pid != ftrace_swapper_pid)
> > + put_pid(pid);
> > +
>
> clear_ftrace_pid_task() already called put_pid().
>
oops, you're right.. missed that

> > + list_del(&fpid->list);
> > + kfree(fpid);
> > + }
> > +
> > + ftrace_update_pid_func();
> > + ftrace_startup_enable(0);
> > +
> > + mutex_unlock(&ftrace_lock);
> > +}
> > +
> ...
> > static ssize_t
> > ftrace_pid_write(struct file *filp, const char __user *ubuf,
> > size_t cnt, loff_t *ppos)
> > {
> > - struct pid *pid;
> > char buf[64];
> > long val;
> > int ret;
> > @@ -2897,57 +3016,36 @@ ftrace_pid_write(struct file *filp, const char __user *ubuf,
> >
> > buf[cnt] = 0;
> >
> > + /*
> > + * Allow the "echo > set_ftrace_pid" to clean
> > + * the pids quietly.
> > + */
> > + if (!*ppos && *buf == '\n' && cnt == 1)
> > + return 1;
> > +
>
> How about:
> strstrip(buf);
> if (strlen(buf) == 0)
> return 1;
>
thats better, changed

> So "echo -n '' > set_ftrace_pid" works too.
>
> > ret = strict_strtol(buf, 10, &val);
> > if (ret < 0)
> > return ret;
> >
>

I'll send out v2 shortly, thanks
jirka