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