tracing/events: Don't increment @pos in s_start()
authorLi Zefan <lizf@cn.fujitsu.com>
Wed, 24 Jun 2009 01:52:29 +0000 (09:52 +0800)
committerIngo Molnar <mingo@elte.hu>
Wed, 24 Jun 2009 09:02:49 +0000 (11:02 +0200)
commite1c7e2a6e67fe9db19dd15e71614526a31b5fdb1
tree0b6eb8cf5e699592fc868a44b24e603ad8f3d6af
parent4e8a2372f9255a1464ef488ed925455f53fbdaa1
tracing/events: Don't increment @pos in s_start()

While testing syscall tracepoints posted by Jason, I found 3 entries
were missing when reading available_events. The output size of
available_events is < 4 pages, which means we lost 1 entry per page.

The cause is, it's wrong to increment @pos in s_start().

Actually there's another bug here -- reading avaiable_events/set_events
can race with module unload:

  # cat available_events               |
      s_start()                        |
      s_stop()                         |
                                       | # rmmod foo.ko
      s_start()                        |
        call = list_entry(m->private)  |

@call might be freed and accessing it will lead to crash.

Reviewed-by: Liming Wang <liming.wang@windriver.com>
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
LKML-Reference: <4A4186DD.6090405@cn.fujitsu.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/trace/trace_events.c