Skip to content

Commit 1b9a9ab

Browse files
Mike Christieaxboe
authored andcommitted
blktrace: use op accessors
Have blktrace use the req/bio op accessor to get the REQ_OP. Signed-off-by: Mike Christie <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]> Reviewed-by: Hannes Reinecke <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
1 parent c2df40d commit 1b9a9ab

File tree

4 files changed

+65
-42
lines changed

4 files changed

+65
-42
lines changed

include/linux/blktrace_api.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ static inline int blk_cmd_buf_len(struct request *rq)
118118
}
119119

120120
extern void blk_dump_cmd(char *buf, struct request *rq);
121-
extern void blk_fill_rwbs(char *rwbs, u32 rw, int bytes);
121+
extern void blk_fill_rwbs(char *rwbs, int op, u32 rw, int bytes);
122122

123123
#endif /* CONFIG_EVENT_TRACING && CONFIG_BLOCK */
124124

include/trace/events/bcache.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ DECLARE_EVENT_CLASS(bcache_request,
2727
__entry->sector = bio->bi_iter.bi_sector;
2828
__entry->orig_sector = bio->bi_iter.bi_sector - 16;
2929
__entry->nr_sector = bio->bi_iter.bi_size >> 9;
30-
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size);
30+
blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
31+
bio->bi_iter.bi_size);
3132
),
3233

3334
TP_printk("%d,%d %s %llu + %u (from %d,%d @ %llu)",
@@ -101,7 +102,8 @@ DECLARE_EVENT_CLASS(bcache_bio,
101102
__entry->dev = bio->bi_bdev->bd_dev;
102103
__entry->sector = bio->bi_iter.bi_sector;
103104
__entry->nr_sector = bio->bi_iter.bi_size >> 9;
104-
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size);
105+
blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
106+
bio->bi_iter.bi_size);
105107
),
106108

107109
TP_printk("%d,%d %s %llu + %u",
@@ -136,7 +138,8 @@ TRACE_EVENT(bcache_read,
136138
__entry->dev = bio->bi_bdev->bd_dev;
137139
__entry->sector = bio->bi_iter.bi_sector;
138140
__entry->nr_sector = bio->bi_iter.bi_size >> 9;
139-
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size);
141+
blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
142+
bio->bi_iter.bi_size);
140143
__entry->cache_hit = hit;
141144
__entry->bypass = bypass;
142145
),
@@ -167,7 +170,8 @@ TRACE_EVENT(bcache_write,
167170
__entry->inode = inode;
168171
__entry->sector = bio->bi_iter.bi_sector;
169172
__entry->nr_sector = bio->bi_iter.bi_size >> 9;
170-
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size);
173+
blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
174+
bio->bi_iter.bi_size);
171175
__entry->writeback = writeback;
172176
__entry->bypass = bypass;
173177
),

include/trace/events/block.h

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ DECLARE_EVENT_CLASS(block_rq_with_error,
8484
0 : blk_rq_sectors(rq);
8585
__entry->errors = rq->errors;
8686

87-
blk_fill_rwbs(__entry->rwbs, rq->cmd_flags, blk_rq_bytes(rq));
87+
blk_fill_rwbs(__entry->rwbs, req_op(rq), rq->cmd_flags,
88+
blk_rq_bytes(rq));
8889
blk_dump_cmd(__get_str(cmd), rq);
8990
),
9091

@@ -162,7 +163,7 @@ TRACE_EVENT(block_rq_complete,
162163
__entry->nr_sector = nr_bytes >> 9;
163164
__entry->errors = rq->errors;
164165

165-
blk_fill_rwbs(__entry->rwbs, rq->cmd_flags, nr_bytes);
166+
blk_fill_rwbs(__entry->rwbs, req_op(rq), rq->cmd_flags, nr_bytes);
166167
blk_dump_cmd(__get_str(cmd), rq);
167168
),
168169

@@ -198,7 +199,8 @@ DECLARE_EVENT_CLASS(block_rq,
198199
__entry->bytes = (rq->cmd_type == REQ_TYPE_BLOCK_PC) ?
199200
blk_rq_bytes(rq) : 0;
200201

201-
blk_fill_rwbs(__entry->rwbs, rq->cmd_flags, blk_rq_bytes(rq));
202+
blk_fill_rwbs(__entry->rwbs, req_op(rq), rq->cmd_flags,
203+
blk_rq_bytes(rq));
202204
blk_dump_cmd(__get_str(cmd), rq);
203205
memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
204206
),
@@ -272,7 +274,8 @@ TRACE_EVENT(block_bio_bounce,
272274
bio->bi_bdev->bd_dev : 0;
273275
__entry->sector = bio->bi_iter.bi_sector;
274276
__entry->nr_sector = bio_sectors(bio);
275-
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size);
277+
blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
278+
bio->bi_iter.bi_size);
276279
memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
277280
),
278281

@@ -310,7 +313,8 @@ TRACE_EVENT(block_bio_complete,
310313
__entry->sector = bio->bi_iter.bi_sector;
311314
__entry->nr_sector = bio_sectors(bio);
312315
__entry->error = error;
313-
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size);
316+
blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
317+
bio->bi_iter.bi_size);
314318
),
315319

316320
TP_printk("%d,%d %s %llu + %u [%d]",
@@ -337,7 +341,8 @@ DECLARE_EVENT_CLASS(block_bio_merge,
337341
__entry->dev = bio->bi_bdev->bd_dev;
338342
__entry->sector = bio->bi_iter.bi_sector;
339343
__entry->nr_sector = bio_sectors(bio);
340-
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size);
344+
blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
345+
bio->bi_iter.bi_size);
341346
memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
342347
),
343348

@@ -404,7 +409,8 @@ TRACE_EVENT(block_bio_queue,
404409
__entry->dev = bio->bi_bdev->bd_dev;
405410
__entry->sector = bio->bi_iter.bi_sector;
406411
__entry->nr_sector = bio_sectors(bio);
407-
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size);
412+
blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
413+
bio->bi_iter.bi_size);
408414
memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
409415
),
410416

@@ -432,7 +438,7 @@ DECLARE_EVENT_CLASS(block_get_rq,
432438
__entry->dev = bio ? bio->bi_bdev->bd_dev : 0;
433439
__entry->sector = bio ? bio->bi_iter.bi_sector : 0;
434440
__entry->nr_sector = bio ? bio_sectors(bio) : 0;
435-
blk_fill_rwbs(__entry->rwbs,
441+
blk_fill_rwbs(__entry->rwbs, bio ? bio_op(bio) : 0,
436442
bio ? bio->bi_rw : 0, __entry->nr_sector);
437443
memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
438444
),
@@ -567,7 +573,8 @@ TRACE_EVENT(block_split,
567573
__entry->dev = bio->bi_bdev->bd_dev;
568574
__entry->sector = bio->bi_iter.bi_sector;
569575
__entry->new_sector = new_sector;
570-
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size);
576+
blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
577+
bio->bi_iter.bi_size);
571578
memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
572579
),
573580

@@ -610,7 +617,8 @@ TRACE_EVENT(block_bio_remap,
610617
__entry->nr_sector = bio_sectors(bio);
611618
__entry->old_dev = dev;
612619
__entry->old_sector = from;
613-
blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_iter.bi_size);
620+
blk_fill_rwbs(__entry->rwbs, bio_op(bio), bio->bi_rw,
621+
bio->bi_iter.bi_size);
614622
),
615623

616624
TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu",
@@ -656,7 +664,8 @@ TRACE_EVENT(block_rq_remap,
656664
__entry->old_dev = dev;
657665
__entry->old_sector = from;
658666
__entry->nr_bios = blk_rq_count_bios(rq);
659-
blk_fill_rwbs(__entry->rwbs, rq->cmd_flags, blk_rq_bytes(rq));
667+
blk_fill_rwbs(__entry->rwbs, req_op(rq), rq->cmd_flags,
668+
blk_rq_bytes(rq));
660669
),
661670

662671
TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu %u",

kernel/trace/blktrace.c

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,8 @@ static const u32 ddir_act[2] = { BLK_TC_ACT(BLK_TC_READ),
199199
* blk_io_trace structure and places it in a per-cpu subbuffer.
200200
*/
201201
static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
202-
int rw, u32 what, int error, int pdu_len, void *pdu_data)
202+
int op, int op_flags, u32 what, int error, int pdu_len,
203+
void *pdu_data)
203204
{
204205
struct task_struct *tsk = current;
205206
struct ring_buffer_event *event = NULL;
@@ -214,13 +215,14 @@ static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
214215
if (unlikely(bt->trace_state != Blktrace_running && !blk_tracer))
215216
return;
216217

217-
what |= ddir_act[rw & WRITE];
218-
what |= MASK_TC_BIT(rw, SYNC);
219-
what |= MASK_TC_BIT(rw, RAHEAD);
220-
what |= MASK_TC_BIT(rw, META);
221-
what |= MASK_TC_BIT(rw, DISCARD);
222-
what |= MASK_TC_BIT(rw, FLUSH);
223-
what |= MASK_TC_BIT(rw, FUA);
218+
what |= ddir_act[op_is_write(op) ? WRITE : READ];
219+
what |= MASK_TC_BIT(op_flags, SYNC);
220+
what |= MASK_TC_BIT(op_flags, RAHEAD);
221+
what |= MASK_TC_BIT(op_flags, META);
222+
what |= MASK_TC_BIT(op_flags, FLUSH);
223+
what |= MASK_TC_BIT(op_flags, FUA);
224+
if (op == REQ_OP_DISCARD)
225+
what |= BLK_TC_ACT(BLK_TC_DISCARD);
224226

225227
pid = tsk->pid;
226228
if (act_log_check(bt, what, sector, pid))
@@ -708,11 +710,11 @@ static void blk_add_trace_rq(struct request_queue *q, struct request *rq,
708710

709711
if (rq->cmd_type == REQ_TYPE_BLOCK_PC) {
710712
what |= BLK_TC_ACT(BLK_TC_PC);
711-
__blk_add_trace(bt, 0, nr_bytes, rq->cmd_flags,
713+
__blk_add_trace(bt, 0, nr_bytes, req_op(rq), rq->cmd_flags,
712714
what, rq->errors, rq->cmd_len, rq->cmd);
713715
} else {
714716
what |= BLK_TC_ACT(BLK_TC_FS);
715-
__blk_add_trace(bt, blk_rq_pos(rq), nr_bytes,
717+
__blk_add_trace(bt, blk_rq_pos(rq), nr_bytes, req_op(rq),
716718
rq->cmd_flags, what, rq->errors, 0, NULL);
717719
}
718720
}
@@ -770,7 +772,7 @@ static void blk_add_trace_bio(struct request_queue *q, struct bio *bio,
770772
return;
771773

772774
__blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size,
773-
bio->bi_rw, what, error, 0, NULL);
775+
bio_op(bio), bio->bi_rw, what, error, 0, NULL);
774776
}
775777

776778
static void blk_add_trace_bio_bounce(void *ignore,
@@ -818,7 +820,8 @@ static void blk_add_trace_getrq(void *ignore,
818820
struct blk_trace *bt = q->blk_trace;
819821

820822
if (bt)
821-
__blk_add_trace(bt, 0, 0, rw, BLK_TA_GETRQ, 0, 0, NULL);
823+
__blk_add_trace(bt, 0, 0, rw, 0, BLK_TA_GETRQ, 0, 0,
824+
NULL);
822825
}
823826
}
824827

@@ -833,7 +836,7 @@ static void blk_add_trace_sleeprq(void *ignore,
833836
struct blk_trace *bt = q->blk_trace;
834837

835838
if (bt)
836-
__blk_add_trace(bt, 0, 0, rw, BLK_TA_SLEEPRQ,
839+
__blk_add_trace(bt, 0, 0, rw, 0, BLK_TA_SLEEPRQ,
837840
0, 0, NULL);
838841
}
839842
}
@@ -843,7 +846,7 @@ static void blk_add_trace_plug(void *ignore, struct request_queue *q)
843846
struct blk_trace *bt = q->blk_trace;
844847

845848
if (bt)
846-
__blk_add_trace(bt, 0, 0, 0, BLK_TA_PLUG, 0, 0, NULL);
849+
__blk_add_trace(bt, 0, 0, 0, 0, BLK_TA_PLUG, 0, 0, NULL);
847850
}
848851

849852
static void blk_add_trace_unplug(void *ignore, struct request_queue *q,
@@ -860,7 +863,7 @@ static void blk_add_trace_unplug(void *ignore, struct request_queue *q,
860863
else
861864
what = BLK_TA_UNPLUG_TIMER;
862865

863-
__blk_add_trace(bt, 0, 0, 0, what, 0, sizeof(rpdu), &rpdu);
866+
__blk_add_trace(bt, 0, 0, 0, 0, what, 0, sizeof(rpdu), &rpdu);
864867
}
865868
}
866869

@@ -874,8 +877,9 @@ static void blk_add_trace_split(void *ignore,
874877
__be64 rpdu = cpu_to_be64(pdu);
875878

876879
__blk_add_trace(bt, bio->bi_iter.bi_sector,
877-
bio->bi_iter.bi_size, bio->bi_rw, BLK_TA_SPLIT,
878-
bio->bi_error, sizeof(rpdu), &rpdu);
880+
bio->bi_iter.bi_size, bio_op(bio), bio->bi_rw,
881+
BLK_TA_SPLIT, bio->bi_error, sizeof(rpdu),
882+
&rpdu);
879883
}
880884
}
881885

@@ -907,7 +911,7 @@ static void blk_add_trace_bio_remap(void *ignore,
907911
r.sector_from = cpu_to_be64(from);
908912

909913
__blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size,
910-
bio->bi_rw, BLK_TA_REMAP, bio->bi_error,
914+
bio_op(bio), bio->bi_rw, BLK_TA_REMAP, bio->bi_error,
911915
sizeof(r), &r);
912916
}
913917

@@ -940,7 +944,7 @@ static void blk_add_trace_rq_remap(void *ignore,
940944
r.sector_from = cpu_to_be64(from);
941945

942946
__blk_add_trace(bt, blk_rq_pos(rq), blk_rq_bytes(rq),
943-
rq_data_dir(rq), BLK_TA_REMAP, !!rq->errors,
947+
rq_data_dir(rq), 0, BLK_TA_REMAP, !!rq->errors,
944948
sizeof(r), &r);
945949
}
946950

@@ -965,10 +969,10 @@ void blk_add_driver_data(struct request_queue *q,
965969
return;
966970

967971
if (rq->cmd_type == REQ_TYPE_BLOCK_PC)
968-
__blk_add_trace(bt, 0, blk_rq_bytes(rq), 0,
972+
__blk_add_trace(bt, 0, blk_rq_bytes(rq), 0, 0,
969973
BLK_TA_DRV_DATA, rq->errors, len, data);
970974
else
971-
__blk_add_trace(bt, blk_rq_pos(rq), blk_rq_bytes(rq), 0,
975+
__blk_add_trace(bt, blk_rq_pos(rq), blk_rq_bytes(rq), 0, 0,
972976
BLK_TA_DRV_DATA, rq->errors, len, data);
973977
}
974978
EXPORT_SYMBOL_GPL(blk_add_driver_data);
@@ -1769,21 +1773,27 @@ void blk_dump_cmd(char *buf, struct request *rq)
17691773
}
17701774
}
17711775

1772-
void blk_fill_rwbs(char *rwbs, u32 rw, int bytes)
1776+
void blk_fill_rwbs(char *rwbs, int op, u32 rw, int bytes)
17731777
{
17741778
int i = 0;
17751779

17761780
if (rw & REQ_FLUSH)
17771781
rwbs[i++] = 'F';
17781782

1779-
if (rw & WRITE)
1783+
switch (op) {
1784+
case REQ_OP_WRITE:
1785+
case REQ_OP_WRITE_SAME:
17801786
rwbs[i++] = 'W';
1781-
else if (rw & REQ_DISCARD)
1787+
break;
1788+
case REQ_OP_DISCARD:
17821789
rwbs[i++] = 'D';
1783-
else if (bytes)
1790+
break;
1791+
case REQ_OP_READ:
17841792
rwbs[i++] = 'R';
1785-
else
1793+
break;
1794+
default:
17861795
rwbs[i++] = 'N';
1796+
}
17871797

17881798
if (rw & REQ_FUA)
17891799
rwbs[i++] = 'F';

0 commit comments

Comments
 (0)