• Steven Rostedt (VMware)'s avatar
    ftrace: Update func_pos in t_start() when all functions are enabled · 43ff926a
    Steven Rostedt (VMware) authored
    If all functions are enabled, there's a comment displayed in the file to
    denote that:
    
      # cd /sys/kernel/debug/tracing
      # cat set_ftrace_filter
     #### all functions enabled ####
    
    If a function trigger is set, those are displayed as well:
    
      # echo schedule:traceoff >> /debug/tracing/set_ftrace_filter
      # cat set_ftrace_filter
     #### all functions enabled ####
     schedule:traceoff:unlimited
    
    But if you read that file with dd, the output can change:
    
      # dd if=/debug/tracing/set_ftrace_filter bs=1
     #### all functions enabled ####
     32+0 records in
     32+0 records out
     32 bytes copied, 7.0237e-05 s, 456 kB/s
    
    This is because the "pos" variable is updated for the comment, but func_pos
    is not. "func_pos" is used by the triggers (or hashes) to know how many
    functions were printed and it bases its index from the pos - func_pos.
    func_pos should be 1 to count for the comment printed. But since it is not,
    t_hash_start() thinks that one trigger was already printed.
    
    The cat gets to t_hash_start() via t_next() and not t_start() which updates
    both pos and func_pos.
    Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    43ff926a
ftrace.c 146 KB