aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Christie <mchristi@redhat.com>2016-06-05 15:32:18 -0400
committerJens Axboe <axboe@fb.com>2016-06-07 15:41:38 -0400
commit1b9a9ab78b0ab79dc1f0ddd5fbed7833ec7de3a4 (patch)
treeada8868edd0e9c1761507b38db94b0b7cb0347fe
parentc2df40dfb8c015211ec55f4b1dd0587f875c7b34 (diff)
blktrace: use op accessors
Have blktrace use the req/bio op accessor to get the REQ_OP. Signed-off-by: Mike Christie <mchristi@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Hannes Reinecke <hare@suse.com> Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r--include/linux/blktrace_api.h2
-rw-r--r--include/trace/events/bcache.h12
-rw-r--r--include/trace/events/block.h31
-rw-r--r--kernel/trace/blktrace.c62
4 files changed, 65 insertions, 42 deletions
diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h
index 0f3172b8b225..cceb72f9e29f 100644
--- a/include/linux/blktrace_api.h
+++ b/include/linux/blktrace_api.h
@@ -118,7 +118,7 @@ static inline int blk_cmd_buf_len(struct request *rq)
118} 118}
119 119
120extern void blk_dump_cmd(char *buf, struct request *rq); 120extern void blk_dump_cmd(char *buf, struct request *rq);
121extern void blk_fill_rwbs(char *rwbs, u32 rw, int bytes); 121extern void blk_fill_rwbs(char *rwbs, int op, u32 rw, int bytes);
122 122
123#endif /* CONFIG_EVENT_TRACING && CONFIG_BLOCK */ 123#endif /* CONFIG_EVENT_TRACING && CONFIG_BLOCK */
124 124
diff --git a/include/trace/events/bcache.h b/include/trace/events/bcache.h
index 981acf74b14f..65673d8b81ac 100644
--- a/include/trace/events/bcache.h
+++ b/include/trace/events/bcache.h
@@ -27,7 +27,8 @@ DECLARE_EVENT_CLASS(bcache_request,
27 __entry->sector = bio->bi_iter.bi_sector; 27 __entry->sector = bio->bi_iter.bi_sector;
28 __entry->orig_sector = bio->bi_iter.bi_sector - 16; 28 __entry->orig_sector = bio->bi_iter.bi_sector - 16;
29 __entry->nr_sector = bio->bi_iter.bi_size >> 9; 29 __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);
31 ), 32 ),
32 33
33 TP_printk("%d,%d %s %llu + %u (from %d,%d @ %llu)", 34 TP_printk("%d,%d %s %llu + %u (from %d,%d @ %llu)",
@@ -101,7 +102,8 @@ DECLARE_EVENT_CLASS(bcache_bio,
101 __entry->dev = bio->bi_bdev->bd_dev; 102 __entry->dev = bio->bi_bdev->bd_dev;
102 __entry->sector = bio->bi_iter.bi_sector; 103 __entry->sector = bio->bi_iter.bi_sector;
103 __entry->nr_sector = bio->bi_iter.bi_size >> 9; 104 __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);
105 ), 107 ),
106 108
107 TP_printk("%d,%d %s %llu + %u", 109 TP_printk("%d,%d %s %llu + %u",
@@ -136,7 +138,8 @@ TRACE_EVENT(bcache_read,
136 __entry->dev = bio->bi_bdev->bd_dev; 138 __entry->dev = bio->bi_bdev->bd_dev;
137 __entry->sector = bio->bi_iter.bi_sector; 139 __entry->sector = bio->bi_iter.bi_sector;
138 __entry->nr_sector = bio->bi_iter.bi_size >> 9; 140 __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);
140 __entry->cache_hit = hit; 143 __entry->cache_hit = hit;
141 __entry->bypass = bypass; 144 __entry->bypass = bypass;
142 ), 145 ),
@@ -167,7 +170,8 @@ TRACE_EVENT(bcache_write,
167 __entry->inode = inode; 170 __entry->inode = inode;
168 __entry->sector = bio->bi_iter.bi_sector; 171 __entry->sector = bio->bi_iter.bi_sector;
169 __entry->nr_sector = bio->bi_iter.bi_size >> 9; 172 __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);
171 __entry->writeback = writeback; 175 __entry->writeback = writeback;
172 __entry->bypass = bypass; 176 __entry->bypass = bypass;
173 ), 177 ),
diff --git a/include/trace/events/block.h b/include/trace/events/block.h
index e8a5eca1dbe5..5a2a7592068f 100644
--- a/include/trace/events/block.h
+++ b/include/trace/events/block.h
@@ -84,7 +84,8 @@ DECLARE_EVENT_CLASS(block_rq_with_error,
84 0 : blk_rq_sectors(rq); 84 0 : blk_rq_sectors(rq);
85 __entry->errors = rq->errors; 85 __entry->errors = rq->errors;
86 86
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));
88 blk_dump_cmd(__get_str(cmd), rq); 89 blk_dump_cmd(__get_str(cmd), rq);
89 ), 90 ),
90 91
@@ -162,7 +163,7 @@ TRACE_EVENT(block_rq_complete,
162 __entry->nr_sector = nr_bytes >> 9; 163 __entry->nr_sector = nr_bytes >> 9;
163 __entry->errors = rq->errors; 164 __entry->errors = rq->errors;
164 165
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);
166 blk_dump_cmd(__get_str(cmd), rq); 167 blk_dump_cmd(__get_str(cmd), rq);
167 ), 168 ),
168 169
@@ -198,7 +199,8 @@ DECLARE_EVENT_CLASS(block_rq,
198 __entry->bytes = (rq->cmd_type == REQ_TYPE_BLOCK_PC) ? 199 __entry->bytes = (rq->cmd_type == REQ_TYPE_BLOCK_PC) ?
199 blk_rq_bytes(rq) : 0; 200 blk_rq_bytes(rq) : 0;
200 201
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));
202 blk_dump_cmd(__get_str(cmd), rq); 204 blk_dump_cmd(__get_str(cmd), rq);
203 memcpy(__entry->comm, current->comm, TASK_COMM_LEN); 205 memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
204 ), 206 ),
@@ -272,7 +274,8 @@ TRACE_EVENT(block_bio_bounce,
272 bio->bi_bdev->bd_dev : 0; 274 bio->bi_bdev->bd_dev : 0;
273 __entry->sector = bio->bi_iter.bi_sector; 275 __entry->sector = bio->bi_iter.bi_sector;
274 __entry->nr_sector = bio_sectors(bio); 276 __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);
276 memcpy(__entry->comm, current->comm, TASK_COMM_LEN); 279 memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
277 ), 280 ),
278 281
@@ -310,7 +313,8 @@ TRACE_EVENT(block_bio_complete,
310 __entry->sector = bio->bi_iter.bi_sector; 313 __entry->sector = bio->bi_iter.bi_sector;
311 __entry->nr_sector = bio_sectors(bio); 314 __entry->nr_sector = bio_sectors(bio);
312 __entry->error = error; 315 __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);
314 ), 318 ),
315 319
316 TP_printk("%d,%d %s %llu + %u [%d]", 320 TP_printk("%d,%d %s %llu + %u [%d]",
@@ -337,7 +341,8 @@ DECLARE_EVENT_CLASS(block_bio_merge,
337 __entry->dev = bio->bi_bdev->bd_dev; 341 __entry->dev = bio->bi_bdev->bd_dev;
338 __entry->sector = bio->bi_iter.bi_sector; 342 __entry->sector = bio->bi_iter.bi_sector;
339 __entry->nr_sector = bio_sectors(bio); 343 __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);
341 memcpy(__entry->comm, current->comm, TASK_COMM_LEN); 346 memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
342 ), 347 ),
343 348
@@ -404,7 +409,8 @@ TRACE_EVENT(block_bio_queue,
404 __entry->dev = bio->bi_bdev->bd_dev; 409 __entry->dev = bio->bi_bdev->bd_dev;
405 __entry->sector = bio->bi_iter.bi_sector; 410 __entry->sector = bio->bi_iter.bi_sector;
406 __entry->nr_sector = bio_sectors(bio); 411 __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);
408 memcpy(__entry->comm, current->comm, TASK_COMM_LEN); 414 memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
409 ), 415 ),
410 416
@@ -432,7 +438,7 @@ DECLARE_EVENT_CLASS(block_get_rq,
432 __entry->dev = bio ? bio->bi_bdev->bd_dev : 0; 438 __entry->dev = bio ? bio->bi_bdev->bd_dev : 0;
433 __entry->sector = bio ? bio->bi_iter.bi_sector : 0; 439 __entry->sector = bio ? bio->bi_iter.bi_sector : 0;
434 __entry->nr_sector = bio ? bio_sectors(bio) : 0; 440 __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,
436 bio ? bio->bi_rw : 0, __entry->nr_sector); 442 bio ? bio->bi_rw : 0, __entry->nr_sector);
437 memcpy(__entry->comm, current->comm, TASK_COMM_LEN); 443 memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
438 ), 444 ),
@@ -567,7 +573,8 @@ TRACE_EVENT(block_split,
567 __entry->dev = bio->bi_bdev->bd_dev; 573 __entry->dev = bio->bi_bdev->bd_dev;
568 __entry->sector = bio->bi_iter.bi_sector; 574 __entry->sector = bio->bi_iter.bi_sector;
569 __entry->new_sector = new_sector; 575 __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);
571 memcpy(__entry->comm, current->comm, TASK_COMM_LEN); 578 memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
572 ), 579 ),
573 580
@@ -610,7 +617,8 @@ TRACE_EVENT(block_bio_remap,
610 __entry->nr_sector = bio_sectors(bio); 617 __entry->nr_sector = bio_sectors(bio);
611 __entry->old_dev = dev; 618 __entry->old_dev = dev;
612 __entry->old_sector = from; 619 __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);
614 ), 622 ),
615 623
616 TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu", 624 TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu",
@@ -656,7 +664,8 @@ TRACE_EVENT(block_rq_remap,
656 __entry->old_dev = dev; 664 __entry->old_dev = dev;
657 __entry->old_sector = from; 665 __entry->old_sector = from;
658 __entry->nr_bios = blk_rq_count_bios(rq); 666 __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));
660 ), 669 ),
661 670
662 TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu %u", 671 TP_printk("%d,%d %s %llu + %u <- (%d,%d) %llu %u",
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
index 9aef8654e90d..2d16fad519b2 100644
--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -199,7 +199,8 @@ static const u32 ddir_act[2] = { BLK_TC_ACT(BLK_TC_READ),
199 * blk_io_trace structure and places it in a per-cpu subbuffer. 199 * blk_io_trace structure and places it in a per-cpu subbuffer.
200 */ 200 */
201static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes, 201static 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)
203{ 204{
204 struct task_struct *tsk = current; 205 struct task_struct *tsk = current;
205 struct ring_buffer_event *event = NULL; 206 struct ring_buffer_event *event = NULL;
@@ -214,13 +215,14 @@ static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
214 if (unlikely(bt->trace_state != Blktrace_running && !blk_tracer)) 215 if (unlikely(bt->trace_state != Blktrace_running && !blk_tracer))
215 return; 216 return;
216 217
217 what |= ddir_act[rw & WRITE]; 218 what |= ddir_act[op_is_write(op) ? WRITE : READ];
218 what |= MASK_TC_BIT(rw, SYNC); 219 what |= MASK_TC_BIT(op_flags, SYNC);
219 what |= MASK_TC_BIT(rw, RAHEAD); 220 what |= MASK_TC_BIT(op_flags, RAHEAD);
220 what |= MASK_TC_BIT(rw, META); 221 what |= MASK_TC_BIT(op_flags, META);
221 what |= MASK_TC_BIT(rw, DISCARD); 222 what |= MASK_TC_BIT(op_flags, FLUSH);
222 what |= MASK_TC_BIT(rw, FLUSH); 223 what |= MASK_TC_BIT(op_flags, FUA);
223 what |= MASK_TC_BIT(rw, FUA); 224 if (op == REQ_OP_DISCARD)
225 what |= BLK_TC_ACT(BLK_TC_DISCARD);
224 226
225 pid = tsk->pid; 227 pid = tsk->pid;
226 if (act_log_check(bt, what, sector, pid)) 228 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,
708 710
709 if (rq->cmd_type == REQ_TYPE_BLOCK_PC) { 711 if (rq->cmd_type == REQ_TYPE_BLOCK_PC) {
710 what |= BLK_TC_ACT(BLK_TC_PC); 712 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,
712 what, rq->errors, rq->cmd_len, rq->cmd); 714 what, rq->errors, rq->cmd_len, rq->cmd);
713 } else { 715 } else {
714 what |= BLK_TC_ACT(BLK_TC_FS); 716 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),
716 rq->cmd_flags, what, rq->errors, 0, NULL); 718 rq->cmd_flags, what, rq->errors, 0, NULL);
717 } 719 }
718} 720}
@@ -770,7 +772,7 @@ static void blk_add_trace_bio(struct request_queue *q, struct bio *bio,
770 return; 772 return;
771 773
772 __blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size, 774 __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);
774} 776}
775 777
776static void blk_add_trace_bio_bounce(void *ignore, 778static void blk_add_trace_bio_bounce(void *ignore,
@@ -818,7 +820,8 @@ static void blk_add_trace_getrq(void *ignore,
818 struct blk_trace *bt = q->blk_trace; 820 struct blk_trace *bt = q->blk_trace;
819 821
820 if (bt) 822 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);
822 } 825 }
823} 826}
824 827
@@ -833,7 +836,7 @@ static void blk_add_trace_sleeprq(void *ignore,
833 struct blk_trace *bt = q->blk_trace; 836 struct blk_trace *bt = q->blk_trace;
834 837
835 if (bt) 838 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,
837 0, 0, NULL); 840 0, 0, NULL);
838 } 841 }
839} 842}
@@ -843,7 +846,7 @@ static void blk_add_trace_plug(void *ignore, struct request_queue *q)
843 struct blk_trace *bt = q->blk_trace; 846 struct blk_trace *bt = q->blk_trace;
844 847
845 if (bt) 848 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);
847} 850}
848 851
849static void blk_add_trace_unplug(void *ignore, struct request_queue *q, 852static 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,
860 else 863 else
861 what = BLK_TA_UNPLUG_TIMER; 864 what = BLK_TA_UNPLUG_TIMER;
862 865
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);
864 } 867 }
865} 868}
866 869
@@ -874,8 +877,9 @@ static void blk_add_trace_split(void *ignore,
874 __be64 rpdu = cpu_to_be64(pdu); 877 __be64 rpdu = cpu_to_be64(pdu);
875 878
876 __blk_add_trace(bt, bio->bi_iter.bi_sector, 879 __blk_add_trace(bt, bio->bi_iter.bi_sector,
877 bio->bi_iter.bi_size, bio->bi_rw, BLK_TA_SPLIT, 880 bio->bi_iter.bi_size, bio_op(bio), bio->bi_rw,
878 bio->bi_error, sizeof(rpdu), &rpdu); 881 BLK_TA_SPLIT, bio->bi_error, sizeof(rpdu),
882 &rpdu);
879 } 883 }
880} 884}
881 885
@@ -907,7 +911,7 @@ static void blk_add_trace_bio_remap(void *ignore,
907 r.sector_from = cpu_to_be64(from); 911 r.sector_from = cpu_to_be64(from);
908 912
909 __blk_add_trace(bt, bio->bi_iter.bi_sector, bio->bi_iter.bi_size, 913 __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,
911 sizeof(r), &r); 915 sizeof(r), &r);
912} 916}
913 917
@@ -940,7 +944,7 @@ static void blk_add_trace_rq_remap(void *ignore,
940 r.sector_from = cpu_to_be64(from); 944 r.sector_from = cpu_to_be64(from);
941 945
942 __blk_add_trace(bt, blk_rq_pos(rq), blk_rq_bytes(rq), 946 __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,
944 sizeof(r), &r); 948 sizeof(r), &r);
945} 949}
946 950
@@ -965,10 +969,10 @@ void blk_add_driver_data(struct request_queue *q,
965 return; 969 return;
966 970
967 if (rq->cmd_type == REQ_TYPE_BLOCK_PC) 971 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,
969 BLK_TA_DRV_DATA, rq->errors, len, data); 973 BLK_TA_DRV_DATA, rq->errors, len, data);
970 else 974 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,
972 BLK_TA_DRV_DATA, rq->errors, len, data); 976 BLK_TA_DRV_DATA, rq->errors, len, data);
973} 977}
974EXPORT_SYMBOL_GPL(blk_add_driver_data); 978EXPORT_SYMBOL_GPL(blk_add_driver_data);
@@ -1769,21 +1773,27 @@ void blk_dump_cmd(char *buf, struct request *rq)
1769 } 1773 }
1770} 1774}
1771 1775
1772void blk_fill_rwbs(char *rwbs, u32 rw, int bytes) 1776void blk_fill_rwbs(char *rwbs, int op, u32 rw, int bytes)
1773{ 1777{
1774 int i = 0; 1778 int i = 0;
1775 1779
1776 if (rw & REQ_FLUSH) 1780 if (rw & REQ_FLUSH)
1777 rwbs[i++] = 'F'; 1781 rwbs[i++] = 'F';
1778 1782
1779 if (rw & WRITE) 1783 switch (op) {
1784 case REQ_OP_WRITE:
1785 case REQ_OP_WRITE_SAME:
1780 rwbs[i++] = 'W'; 1786 rwbs[i++] = 'W';
1781 else if (rw & REQ_DISCARD) 1787 break;
1788 case REQ_OP_DISCARD:
1782 rwbs[i++] = 'D'; 1789 rwbs[i++] = 'D';
1783 else if (bytes) 1790 break;
1791 case REQ_OP_READ:
1784 rwbs[i++] = 'R'; 1792 rwbs[i++] = 'R';
1785 else 1793 break;
1794 default:
1786 rwbs[i++] = 'N'; 1795 rwbs[i++] = 'N';
1796 }
1787 1797
1788 if (rw & REQ_FUA) 1798 if (rw & REQ_FUA)
1789 rwbs[i++] = 'F'; 1799 rwbs[i++] = 'F';