• L
    blktrace: fix blk_probes_ref chaos · 17ba97e3
    Li Zefan 提交于
    Impact: fix mixed ioctl and ftrace-plugin blktrace use refcount bugs
    
    ioctl-based blktrace allocates bt and registers tracepoints when
    ioctl(BLKTRACESETUP), and do all cleanups when ioctl(BLKTRACETEARDOWN).
    
    while ftrace-based blktrace allocates/frees bt when:
      # echo 1/0 > /sys/block/sda/sda1/trace/enable
    
    and registers/unregisters tracepoints when:
      # echo blk/nop > /debugfs/tracing/current_tracer
    or
      # echo 1/0 > /debugfs/tracing/tracing_enable
    
    The separatation of allocation and registeration causes 2 problems:
    
      1. current user-space blktrace still calls ioctl(TEARDOWN) when
         ioctl(SETUP) failed:
           # echo 1 > /sys/block/sda/sda1/trace/enable
           # blktrace /dev/sda
             BLKTRACESETUP: Device or resource busy
             ^C
         and now blk_probes_ref == -1
    
      2. Another way to make blk_probes_ref == -1:
         # plugin sdb && mount sdb1
         # echo 1 > /sys/block/sdb/sdb1/trace/enable
         # remove sdb
    
    This patch does the allocation and registeration when writing
    sdaX/trace/enable.
    Signed-off-by: NLi Zefan <lizf@cn.fujitsu.com>
    Acked-by: NJens Axboe <jens.axboe@oracle.com>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Signed-off-by: NIngo Molnar <mingo@elte.hu>
    17ba97e3
blktrace.c 35.7 KB