blktrace.c (33659ebbae262228eef4e0fe990f393d1f0ed941) | blktrace.c (7b6d91daee5cac6402186ff224c3af39d79f4a0e) |
---|---|
1/* 2 * Copyright (C) 2006 Jens Axboe <axboe@kernel.dk> 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 as 6 * published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, --- 155 unchanged lines hidden (view full) --- 164} 165 166/* 167 * Data direction bit lookup 168 */ 169static const u32 ddir_act[2] = { BLK_TC_ACT(BLK_TC_READ), 170 BLK_TC_ACT(BLK_TC_WRITE) }; 171 | 1/* 2 * Copyright (C) 2006 Jens Axboe <axboe@kernel.dk> 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 as 6 * published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, --- 155 unchanged lines hidden (view full) --- 164} 165 166/* 167 * Data direction bit lookup 168 */ 169static const u32 ddir_act[2] = { BLK_TC_ACT(BLK_TC_READ), 170 BLK_TC_ACT(BLK_TC_WRITE) }; 171 |
172#define BLK_TC_HARDBARRIER BLK_TC_BARRIER 173#define BLK_TC_RAHEAD BLK_TC_AHEAD 174 |
|
172/* The ilog2() calls fall out because they're constant */ | 175/* The ilog2() calls fall out because they're constant */ |
173#define MASK_TC_BIT(rw, __name) ((rw & (1 << BIO_RW_ ## __name)) << \ 174 (ilog2(BLK_TC_ ## __name) + BLK_TC_SHIFT - BIO_RW_ ## __name)) | 176#define MASK_TC_BIT(rw, __name) ((rw & REQ_ ## __name) << \ 177 (ilog2(BLK_TC_ ## __name) + BLK_TC_SHIFT - __REQ_ ## __name)) |
175 176/* 177 * The worker for the various blk_add_trace*() types. Fills out a 178 * blk_io_trace structure and places it in a per-cpu subbuffer. 179 */ 180static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes, 181 int rw, u32 what, int error, int pdu_len, void *pdu_data) 182{ --- 6 unchanged lines hidden (view full) --- 189 pid_t pid; 190 int cpu, pc = 0; 191 bool blk_tracer = blk_tracer_enabled; 192 193 if (unlikely(bt->trace_state != Blktrace_running && !blk_tracer)) 194 return; 195 196 what |= ddir_act[rw & WRITE]; | 178 179/* 180 * The worker for the various blk_add_trace*() types. Fills out a 181 * blk_io_trace structure and places it in a per-cpu subbuffer. 182 */ 183static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes, 184 int rw, u32 what, int error, int pdu_len, void *pdu_data) 185{ --- 6 unchanged lines hidden (view full) --- 192 pid_t pid; 193 int cpu, pc = 0; 194 bool blk_tracer = blk_tracer_enabled; 195 196 if (unlikely(bt->trace_state != Blktrace_running && !blk_tracer)) 197 return; 198 199 what |= ddir_act[rw & WRITE]; |
197 what |= MASK_TC_BIT(rw, BARRIER); 198 what |= MASK_TC_BIT(rw, SYNCIO); 199 what |= MASK_TC_BIT(rw, AHEAD); | 200 what |= MASK_TC_BIT(rw, HARDBARRIER); 201 what |= MASK_TC_BIT(rw, SYNC); 202 what |= MASK_TC_BIT(rw, RAHEAD); |
200 what |= MASK_TC_BIT(rw, META); 201 what |= MASK_TC_BIT(rw, DISCARD); 202 203 pid = tsk->pid; 204 if (act_log_check(bt, what, sector, pid)) 205 return; 206 cpu = raw_smp_processor_id(); 207 --- 449 unchanged lines hidden (view full) --- 657{ 658 struct blk_trace *bt = q->blk_trace; 659 int rw = rq->cmd_flags & 0x03; 660 661 if (likely(!bt)) 662 return; 663 664 if (rq->cmd_flags & REQ_DISCARD) | 203 what |= MASK_TC_BIT(rw, META); 204 what |= MASK_TC_BIT(rw, DISCARD); 205 206 pid = tsk->pid; 207 if (act_log_check(bt, what, sector, pid)) 208 return; 209 cpu = raw_smp_processor_id(); 210 --- 449 unchanged lines hidden (view full) --- 660{ 661 struct blk_trace *bt = q->blk_trace; 662 int rw = rq->cmd_flags & 0x03; 663 664 if (likely(!bt)) 665 return; 666 667 if (rq->cmd_flags & REQ_DISCARD) |
665 rw |= (1 << BIO_RW_DISCARD); | 668 rw |= REQ_DISCARD; |
666 667 if (rq->cmd_type == REQ_TYPE_BLOCK_PC) { 668 what |= BLK_TC_ACT(BLK_TC_PC); 669 __blk_add_trace(bt, 0, blk_rq_bytes(rq), rw, 670 what, rq->errors, rq->cmd_len, rq->cmd); 671 } else { 672 what |= BLK_TC_ACT(BLK_TC_FS); 673 __blk_add_trace(bt, blk_rq_pos(rq), blk_rq_bytes(rq), rw, --- 1076 unchanged lines hidden (view full) --- 1750} 1751 1752void blk_fill_rwbs(char *rwbs, u32 rw, int bytes) 1753{ 1754 int i = 0; 1755 1756 if (rw & WRITE) 1757 rwbs[i++] = 'W'; | 669 670 if (rq->cmd_type == REQ_TYPE_BLOCK_PC) { 671 what |= BLK_TC_ACT(BLK_TC_PC); 672 __blk_add_trace(bt, 0, blk_rq_bytes(rq), rw, 673 what, rq->errors, rq->cmd_len, rq->cmd); 674 } else { 675 what |= BLK_TC_ACT(BLK_TC_FS); 676 __blk_add_trace(bt, blk_rq_pos(rq), blk_rq_bytes(rq), rw, --- 1076 unchanged lines hidden (view full) --- 1753} 1754 1755void blk_fill_rwbs(char *rwbs, u32 rw, int bytes) 1756{ 1757 int i = 0; 1758 1759 if (rw & WRITE) 1760 rwbs[i++] = 'W'; |
1758 else if (rw & 1 << BIO_RW_DISCARD) | 1761 else if (rw & REQ_DISCARD) |
1759 rwbs[i++] = 'D'; 1760 else if (bytes) 1761 rwbs[i++] = 'R'; 1762 else 1763 rwbs[i++] = 'N'; 1764 | 1762 rwbs[i++] = 'D'; 1763 else if (bytes) 1764 rwbs[i++] = 'R'; 1765 else 1766 rwbs[i++] = 'N'; 1767 |
1765 if (rw & 1 << BIO_RW_AHEAD) | 1768 if (rw & REQ_RAHEAD) |
1766 rwbs[i++] = 'A'; | 1769 rwbs[i++] = 'A'; |
1767 if (rw & 1 << BIO_RW_BARRIER) | 1770 if (rw & REQ_HARDBARRIER) |
1768 rwbs[i++] = 'B'; | 1771 rwbs[i++] = 'B'; |
1769 if (rw & 1 << BIO_RW_SYNCIO) | 1772 if (rw & REQ_SYNC) |
1770 rwbs[i++] = 'S'; | 1773 rwbs[i++] = 'S'; |
1771 if (rw & 1 << BIO_RW_META) | 1774 if (rw & REQ_META) |
1772 rwbs[i++] = 'M'; 1773 1774 rwbs[i] = '\0'; 1775} 1776 1777void blk_fill_rwbs_rq(char *rwbs, struct request *rq) 1778{ 1779 int rw = rq->cmd_flags & 0x03; 1780 int bytes; 1781 1782 if (rq->cmd_flags & REQ_DISCARD) | 1775 rwbs[i++] = 'M'; 1776 1777 rwbs[i] = '\0'; 1778} 1779 1780void blk_fill_rwbs_rq(char *rwbs, struct request *rq) 1781{ 1782 int rw = rq->cmd_flags & 0x03; 1783 int bytes; 1784 1785 if (rq->cmd_flags & REQ_DISCARD) |
1783 rw |= (1 << BIO_RW_DISCARD); | 1786 rw |= REQ_DISCARD; |
1784 1785 bytes = blk_rq_bytes(rq); 1786 1787 blk_fill_rwbs(rwbs, rw, bytes); 1788} 1789 1790#endif /* CONFIG_EVENT_TRACING */ 1791 | 1787 1788 bytes = blk_rq_bytes(rq); 1789 1790 blk_fill_rwbs(rwbs, rw, bytes); 1791} 1792 1793#endif /* CONFIG_EVENT_TRACING */ 1794 |