aboutsummaryrefslogtreecommitdiffstats
path: root/include/trace/events/block.h
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2013-01-11 16:06:33 -0500
committerJens Axboe <axboe@kernel.dk>2013-01-14 09:00:36 -0500
commit3a366e614d0837d9fc23f78cdb1a1186ebc3387f (patch)
tree5be6ec716687234ac1e6202db62c84ee1d2246be /include/trace/events/block.h
parentac9a19745196388ae5d828c0be7a1d6e472101f3 (diff)
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>
Diffstat (limited to 'include/trace/events/block.h')
-rw-r--r--include/trace/events/block.h8
1 files changed, 4 insertions, 4 deletions
diff --git a/include/trace/events/block.h b/include/trace/events/block.h
index 05c5e61f0a7c..8a168db9a645 100644
--- a/include/trace/events/block.h
+++ b/include/trace/events/block.h
@@ -206,7 +206,6 @@ TRACE_EVENT(block_bio_bounce,
206 206
207/** 207/**
208 * block_bio_complete - completed all work on the block operation 208 * block_bio_complete - completed all work on the block operation
209 * @q: queue holding the block operation
210 * @bio: block operation completed 209 * @bio: block operation completed
211 * @error: io error value 210 * @error: io error value
212 * 211 *
@@ -215,9 +214,9 @@ TRACE_EVENT(block_bio_bounce,
215 */ 214 */
216TRACE_EVENT(block_bio_complete, 215TRACE_EVENT(block_bio_complete,
217 216
218 TP_PROTO(struct request_queue *q, struct bio *bio, int error), 217 TP_PROTO(struct bio *bio, int error),
219 218
220 TP_ARGS(q, bio, error), 219 TP_ARGS(bio, error),
221 220
222 TP_STRUCT__entry( 221 TP_STRUCT__entry(
223 __field( dev_t, dev ) 222 __field( dev_t, dev )
@@ -228,7 +227,8 @@ TRACE_EVENT(block_bio_complete,
228 ), 227 ),
229 228
230 TP_fast_assign( 229 TP_fast_assign(
231 __entry->dev = bio->bi_bdev->bd_dev; 230 __entry->dev = bio->bi_bdev ?
231 bio->bi_bdev->bd_dev : 0;
232 __entry->sector = bio->bi_sector; 232 __entry->sector = bio->bi_sector;
233 __entry->nr_sector = bio->bi_size >> 9; 233 __entry->nr_sector = bio->bi_size >> 9;
234 __entry->error = error; 234 __entry->error = error;