block: add missing block_bio_complete() tracepoint
authorTejun Heo <tj@kernel.org>
Fri, 11 Jan 2013 21:06:33 +0000 (13:06 -0800)
committerJens Axboe <axboe@kernel.dk>
Mon, 14 Jan 2013 14:00:36 +0000 (15:00 +0100)
commit3a366e614d0837d9fc23f78cdb1a1186ebc3387f
tree5be6ec716687234ac1e6202db62c84ee1d2246be
parentac9a19745196388ae5d828c0be7a1d6e472101f3
block: add missing block_bio_complete() tracepoint

bio completion didn't kick block_bio_complete TP.  Only dm was
explicitly triggering the TP on IO completion.  This makes
block_bio_complete TP useless for tracers which want to know about
bios, and all other bio based drivers skip generating blktrace
completion events.

This patch makes all bio completions via bio_endio() generate
block_bio_complete TP.

* Explicit trace_block_bio_complete() invocation removed from dm and
  the trace point is unexported.

* @rq dropped from trace_block_bio_complete().  bios may fly around
  w/o queue associated.  Verifying and accessing the assocaited queue
  belongs to TP probes.

* blktrace now gets both request and bio completions.  Make it ignore
  bio completions if request completion path is happening.

This makes all bio based drivers generate blktrace completion events
properly and makes the block_bio_complete TP actually useful.

v2: With this change, block_bio_complete TP could be invoked on sg
    commands which have bio's with %NULL bi_bdev.  Update TP
    assignment code to check whether bio->bi_bdev is %NULL before
    dereferencing.

Signed-off-by: Tejun Heo <tj@kernel.org>
Original-patch-by: Namhyung Kim <namhyung@gmail.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Alasdair Kergon <agk@redhat.com>
Cc: dm-devel@redhat.com
Cc: Neil Brown <neilb@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-core.c
drivers/md/dm.c
drivers/md/raid5.c
fs/bio.c
include/linux/blktrace_api.h
include/trace/events/block.h
kernel/trace/blktrace.c