summary refs log tree commit diff
path: root/block
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2020-06-17 15:58:23 +0200
committerJens Axboe <axboe@kernel.dk>2020-06-25 21:06:11 -0600
commitf3bdc62fd82ed93dbe4d049eacba310de7eb2a6a (patch)
treeeefbacc996ba10e58a127a7a2df8924e4bbb0179 /block
parent621c1f42945e76015c3a585e7a9fe6e71665eba0 (diff)
downloadlinux-f3bdc62fd82ed93dbe4d049eacba310de7eb2a6a.tar.gz
blktrace: Provide event for request merging
Currently blk-mq does not report any event when two requests get merged
in the elevator. This then results in difficult to understand sequence
of events like:

...
  8,0   34     1579     0.608765271  2718  I  WS 215023504 + 40 [dbench]
  8,0   34     1584     0.609184613  2719  A  WS 215023544 + 56 <- (8,4) 2160568
  8,0   34     1585     0.609184850  2719  Q  WS 215023544 + 56 [dbench]
  8,0   34     1586     0.609188524  2719  G  WS 215023544 + 56 [dbench]
  8,0    3      602     0.609684162   773  D  WS 215023504 + 96 [kworker/3:1H]
  8,0   34     1591     0.609843593     0  C  WS 215023504 + 96 [0]

and you can only guess (after quite some headscratching since the above
excerpt is intermixed with a lot of other IO) that request 215023544+56
got merged to request 215023504+40. Provide proper event for request
merging like we used to do in the legacy block layer.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block')
-rw-r--r--block/blk-merge.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/block/blk-merge.c b/block/blk-merge.c
index f0b0bae075a0..9c9fb21584b6 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -793,6 +793,8 @@ static struct request *attempt_merge(struct request_queue *q,
 	 */
 	blk_account_io_merge_request(next);
 
+	trace_block_rq_merge(q, next);
+
 	/*
 	 * ownership of bio passed from next to req, return 'next' for
 	 * the caller to free