Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 140681
b: refs/heads/master
c: b2821ae
h: refs/heads/master
i:
  140679: 40885a7
v: v3
  • Loading branch information
Steven Rostedt authored and Ingo Molnar committed Feb 3, 2009
1 parent 290563e commit 74f1cd9
Show file tree
Hide file tree
Showing 7 changed files with 280 additions and 293 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 939b366977d29b5c0d53d1ea3b0b8cefb1e76202
refs/heads/master: b2821ae68b14480bfc85ea1629537163310bc5cd
83 changes: 20 additions & 63 deletions trunk/block/blktrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#include <linux/debugfs.h>
#include <linux/time.h>
#include <trace/block.h>
#include <linux/uaccess.h>
#include <asm/uaccess.h>
#include <../kernel/trace/trace_output.h>

static unsigned int blktrace_seq __read_mostly = 1;
Expand Down Expand Up @@ -148,12 +148,11 @@ static int act_log_check(struct blk_trace *bt, u32 what, sector_t sector,
/*
* Data direction bit lookup
*/
static u32 ddir_act[2] __read_mostly = { BLK_TC_ACT(BLK_TC_READ),
BLK_TC_ACT(BLK_TC_WRITE) };
static u32 ddir_act[2] __read_mostly = { BLK_TC_ACT(BLK_TC_READ), BLK_TC_ACT(BLK_TC_WRITE) };

/* The ilog2() calls fall out because they're constant */
#define MASK_TC_BIT(rw, __name) ((rw & (1 << BIO_RW_ ## __name)) << \
(ilog2(BLK_TC_ ## __name) + BLK_TC_SHIFT - BIO_RW_ ## __name))
#define MASK_TC_BIT(rw, __name) ( (rw & (1 << BIO_RW_ ## __name)) << \
(ilog2(BLK_TC_ ## __name) + BLK_TC_SHIFT - BIO_RW_ ## __name) )

/*
* The worker for the various blk_add_trace*() types. Fills out a
Expand Down Expand Up @@ -220,16 +219,9 @@ static void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
t->magic = BLK_IO_TRACE_MAGIC | BLK_IO_TRACE_VERSION;
t->sequence = ++(*sequence);
t->time = ktime_to_ns(ktime_get());
record_it:
/*
* These two are not needed in ftrace as they are in the
* generic trace_entry, filled by tracing_generic_entry_update,
* but for the trace_event->bin() synthesizer benefit we do it
* here too.
*/
t->cpu = cpu;
t->pid = pid;

record_it:
t->sector = sector;
t->bytes = bytes;
t->action = what;
Expand Down Expand Up @@ -454,8 +446,7 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
atomic_set(&bt->dropped, 0);

ret = -EIO;
bt->dropped_file = debugfs_create_file("dropped", 0444, dir, bt,
&blk_dropped_fops);
bt->dropped_file = debugfs_create_file("dropped", 0444, dir, bt, &blk_dropped_fops);
if (!bt->dropped_file)
goto err;

Expand Down Expand Up @@ -537,10 +528,10 @@ EXPORT_SYMBOL_GPL(blk_trace_setup);

int blk_trace_startstop(struct request_queue *q, int start)
{
struct blk_trace *bt;
int ret;
struct blk_trace *bt = q->blk_trace;

if (bt == NULL)
if ((bt = q->blk_trace) == NULL)
return -EINVAL;

/*
Expand Down Expand Up @@ -676,14 +667,12 @@ static void blk_add_trace_rq_issue(struct request_queue *q, struct request *rq)
blk_add_trace_rq(q, rq, BLK_TA_ISSUE);
}

static void blk_add_trace_rq_requeue(struct request_queue *q,
struct request *rq)
static void blk_add_trace_rq_requeue(struct request_queue *q, struct request *rq)
{
blk_add_trace_rq(q, rq, BLK_TA_REQUEUE);
}

static void blk_add_trace_rq_complete(struct request_queue *q,
struct request *rq)
static void blk_add_trace_rq_complete(struct request_queue *q, struct request *rq)
{
blk_add_trace_rq(q, rq, BLK_TA_COMPLETE);
}
Expand Down Expand Up @@ -720,14 +709,12 @@ static void blk_add_trace_bio_complete(struct request_queue *q, struct bio *bio)
blk_add_trace_bio(q, bio, BLK_TA_COMPLETE);
}

static void blk_add_trace_bio_backmerge(struct request_queue *q,
struct bio *bio)
static void blk_add_trace_bio_backmerge(struct request_queue *q, struct bio *bio)
{
blk_add_trace_bio(q, bio, BLK_TA_BACKMERGE);
}

static void blk_add_trace_bio_frontmerge(struct request_queue *q,
struct bio *bio)
static void blk_add_trace_bio_frontmerge(struct request_queue *q, struct bio *bio)
{
blk_add_trace_bio(q, bio, BLK_TA_FRONTMERGE);
}
Expand All @@ -737,8 +724,7 @@ static void blk_add_trace_bio_queue(struct request_queue *q, struct bio *bio)
blk_add_trace_bio(q, bio, BLK_TA_QUEUE);
}

static void blk_add_trace_getrq(struct request_queue *q,
struct bio *bio, int rw)
static void blk_add_trace_getrq(struct request_queue *q, struct bio *bio, int rw)
{
if (bio)
blk_add_trace_bio(q, bio, BLK_TA_GETRQ);
Expand All @@ -751,17 +737,15 @@ static void blk_add_trace_getrq(struct request_queue *q,
}


static void blk_add_trace_sleeprq(struct request_queue *q,
struct bio *bio, int rw)
static void blk_add_trace_sleeprq(struct request_queue *q, struct bio *bio, int rw)
{
if (bio)
blk_add_trace_bio(q, bio, BLK_TA_SLEEPRQ);
else {
struct blk_trace *bt = q->blk_trace;

if (bt)
__blk_add_trace(bt, 0, 0, rw, BLK_TA_SLEEPRQ,
0, 0, NULL);
__blk_add_trace(bt, 0, 0, rw, BLK_TA_SLEEPRQ, 0, 0, NULL);
}
}

Expand Down Expand Up @@ -1102,7 +1086,6 @@ static void blk_tracer_start(struct trace_array *tr)
if (blk_register_tracepoints())
atomic_dec(&blk_probes_ref);
mutex_unlock(&blk_probe_mutex);
trace_flags &= ~TRACE_ITER_CONTEXT_INFO;
}

static int blk_tracer_init(struct trace_array *tr)
Expand All @@ -1117,7 +1100,6 @@ static int blk_tracer_init(struct trace_array *tr)

static void blk_tracer_stop(struct trace_array *tr)
{
trace_flags |= TRACE_ITER_CONTEXT_INFO;
mutex_lock(&blk_probe_mutex);
if (atomic_dec_and_test(&blk_probes_ref))
blk_unregister_tracepoints();
Expand Down Expand Up @@ -1158,50 +1140,25 @@ static struct {
[__BLK_TA_REMAP] = {{ "A", "remap" }, blk_log_remap },
};

static int blk_trace_event_print(struct trace_iterator *iter, int flags)
static int blk_trace_event_print(struct trace_seq *s, struct trace_entry *ent,
int flags)
{
struct trace_seq *s = &iter->seq;
const struct blk_io_trace *t = (struct blk_io_trace *)iter->ent;
const struct blk_io_trace *t = (struct blk_io_trace *)ent;
const u16 what = t->action & ((1 << BLK_TC_SHIFT) - 1);
int ret;

if (trace_print_context(iter))
return TRACE_TYPE_PARTIAL_LINE;

if (unlikely(what == 0 || what > ARRAY_SIZE(what2act)))
ret = trace_seq_printf(s, "Bad pc action %x\n", what);
else {
const bool long_act = !!(trace_flags & TRACE_ITER_VERBOSE);
ret = blk_log_action_seq(s, t, what2act[what].act[long_act]);
if (ret)
ret = what2act[what].print(s, iter->ent);
ret = what2act[what].print(s, ent);
}

return ret ? TRACE_TYPE_HANDLED : TRACE_TYPE_PARTIAL_LINE;
}

static int blk_trace_synthesize_old_trace(struct trace_iterator *iter)
{
struct trace_seq *s = &iter->seq;
struct blk_io_trace *t = (struct blk_io_trace *)iter->ent;
const int offset = offsetof(struct blk_io_trace, sector);
struct blk_io_trace old = {
.magic = BLK_IO_TRACE_MAGIC | BLK_IO_TRACE_VERSION,
.time = ns2usecs(iter->ts),
};

if (!trace_seq_putmem(s, &old, offset))
return 0;
return trace_seq_putmem(s, &t->sector,
sizeof(old) - offset + t->pdu_len);
}

static int blk_trace_event_print_binary(struct trace_iterator *iter, int flags)
{
return blk_trace_synthesize_old_trace(iter) ?
TRACE_TYPE_HANDLED : TRACE_TYPE_PARTIAL_LINE;
}

static enum print_line_t blk_tracer_print_line(struct trace_iterator *iter)
{
const struct blk_io_trace *t;
Expand Down Expand Up @@ -1243,7 +1200,7 @@ static struct trace_event trace_blk_event = {
.latency_trace = blk_trace_event_print,
.raw = trace_nop_print,
.hex = trace_nop_print,
.binary = blk_trace_event_print_binary,
.binary = trace_nop_print,
};

static int __init init_blk_tracer(void)
Expand Down
Loading

0 comments on commit 74f1cd9

Please sign in to comment.