diff options
| author | David S. Miller <davem@davemloft.net> | 2008-10-11 15:39:35 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2008-10-11 15:39:35 -0400 |
| commit | 56c5d900dbb8e042bfad035d18433476931d8f93 (patch) | |
| tree | 00b793965beeef10db03e0ff021d2d965c410759 /include/linux/blktrace_api.h | |
| parent | 4dd95b63ae25c5cad6986829b5e8788e9faa0330 (diff) | |
| parent | ead9d23d803ea3a73766c3cb27bf7563ac8d7266 (diff) | |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts:
sound/core/memalloc.c
Diffstat (limited to 'include/linux/blktrace_api.h')
| -rw-r--r-- | include/linux/blktrace_api.h | 62 |
1 files changed, 36 insertions, 26 deletions
diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h index d084b8d227a5..3a31eb506164 100644 --- a/include/linux/blktrace_api.h +++ b/include/linux/blktrace_api.h | |||
| @@ -1,8 +1,10 @@ | |||
| 1 | #ifndef BLKTRACE_H | 1 | #ifndef BLKTRACE_H |
| 2 | #define BLKTRACE_H | 2 | #define BLKTRACE_H |
| 3 | 3 | ||
| 4 | #ifdef __KERNEL__ | ||
| 4 | #include <linux/blkdev.h> | 5 | #include <linux/blkdev.h> |
| 5 | #include <linux/relay.h> | 6 | #include <linux/relay.h> |
| 7 | #endif | ||
| 6 | 8 | ||
| 7 | /* | 9 | /* |
| 8 | * Trace categories | 10 | * Trace categories |
| @@ -21,6 +23,7 @@ enum blktrace_cat { | |||
| 21 | BLK_TC_NOTIFY = 1 << 10, /* special message */ | 23 | BLK_TC_NOTIFY = 1 << 10, /* special message */ |
| 22 | BLK_TC_AHEAD = 1 << 11, /* readahead */ | 24 | BLK_TC_AHEAD = 1 << 11, /* readahead */ |
| 23 | BLK_TC_META = 1 << 12, /* metadata */ | 25 | BLK_TC_META = 1 << 12, /* metadata */ |
| 26 | BLK_TC_DISCARD = 1 << 13, /* discard requests */ | ||
| 24 | 27 | ||
| 25 | BLK_TC_END = 1 << 15, /* only 16-bits, reminder */ | 28 | BLK_TC_END = 1 << 15, /* only 16-bits, reminder */ |
| 26 | }; | 29 | }; |
| @@ -47,6 +50,7 @@ enum blktrace_act { | |||
| 47 | __BLK_TA_SPLIT, /* bio was split */ | 50 | __BLK_TA_SPLIT, /* bio was split */ |
| 48 | __BLK_TA_BOUNCE, /* bio was bounced */ | 51 | __BLK_TA_BOUNCE, /* bio was bounced */ |
| 49 | __BLK_TA_REMAP, /* bio was remapped */ | 52 | __BLK_TA_REMAP, /* bio was remapped */ |
| 53 | __BLK_TA_ABORT, /* request aborted */ | ||
| 50 | }; | 54 | }; |
| 51 | 55 | ||
| 52 | /* | 56 | /* |
| @@ -77,6 +81,7 @@ enum blktrace_notify { | |||
| 77 | #define BLK_TA_SPLIT (__BLK_TA_SPLIT) | 81 | #define BLK_TA_SPLIT (__BLK_TA_SPLIT) |
| 78 | #define BLK_TA_BOUNCE (__BLK_TA_BOUNCE) | 82 | #define BLK_TA_BOUNCE (__BLK_TA_BOUNCE) |
| 79 | #define BLK_TA_REMAP (__BLK_TA_REMAP | BLK_TC_ACT(BLK_TC_QUEUE)) | 83 | #define BLK_TA_REMAP (__BLK_TA_REMAP | BLK_TC_ACT(BLK_TC_QUEUE)) |
| 84 | #define BLK_TA_ABORT (__BLK_TA_ABORT | BLK_TC_ACT(BLK_TC_QUEUE)) | ||
| 80 | 85 | ||
| 81 | #define BLK_TN_PROCESS (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY)) | 86 | #define BLK_TN_PROCESS (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY)) |
| 82 | #define BLK_TN_TIMESTAMP (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY)) | 87 | #define BLK_TN_TIMESTAMP (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY)) |
| @@ -89,17 +94,17 @@ enum blktrace_notify { | |||
| 89 | * The trace itself | 94 | * The trace itself |
| 90 | */ | 95 | */ |
| 91 | struct blk_io_trace { | 96 | struct blk_io_trace { |
| 92 | u32 magic; /* MAGIC << 8 | version */ | 97 | __u32 magic; /* MAGIC << 8 | version */ |
| 93 | u32 sequence; /* event number */ | 98 | __u32 sequence; /* event number */ |
| 94 | u64 time; /* in microseconds */ | 99 | __u64 time; /* in microseconds */ |
| 95 | u64 sector; /* disk offset */ | 100 | __u64 sector; /* disk offset */ |
| 96 | u32 bytes; /* transfer length */ | 101 | __u32 bytes; /* transfer length */ |
| 97 | u32 action; /* what happened */ | 102 | __u32 action; /* what happened */ |
| 98 | u32 pid; /* who did it */ | 103 | __u32 pid; /* who did it */ |
| 99 | u32 device; /* device number */ | 104 | __u32 device; /* device number */ |
| 100 | u32 cpu; /* on what cpu did it happen */ | 105 | __u32 cpu; /* on what cpu did it happen */ |
| 101 | u16 error; /* completion error */ | 106 | __u16 error; /* completion error */ |
| 102 | u16 pdu_len; /* length of data after this trace */ | 107 | __u16 pdu_len; /* length of data after this trace */ |
| 103 | }; | 108 | }; |
| 104 | 109 | ||
| 105 | /* | 110 | /* |
| @@ -117,6 +122,23 @@ enum { | |||
| 117 | Blktrace_stopped, | 122 | Blktrace_stopped, |
| 118 | }; | 123 | }; |
| 119 | 124 | ||
| 125 | #define BLKTRACE_BDEV_SIZE 32 | ||
| 126 | |||
| 127 | /* | ||
| 128 | * User setup structure passed with BLKTRACESTART | ||
| 129 | */ | ||
| 130 | struct blk_user_trace_setup { | ||
| 131 | char name[BLKTRACE_BDEV_SIZE]; /* output */ | ||
| 132 | __u16 act_mask; /* input */ | ||
| 133 | __u32 buf_size; /* input */ | ||
| 134 | __u32 buf_nr; /* input */ | ||
| 135 | __u64 start_lba; | ||
| 136 | __u64 end_lba; | ||
| 137 | __u32 pid; | ||
| 138 | }; | ||
| 139 | |||
| 140 | #ifdef __KERNEL__ | ||
| 141 | #if defined(CONFIG_BLK_DEV_IO_TRACE) | ||
| 120 | struct blk_trace { | 142 | struct blk_trace { |
| 121 | int trace_state; | 143 | int trace_state; |
| 122 | struct rchan *rchan; | 144 | struct rchan *rchan; |
| @@ -133,21 +155,6 @@ struct blk_trace { | |||
| 133 | atomic_t dropped; | 155 | atomic_t dropped; |
| 134 | }; | 156 | }; |
| 135 | 157 | ||
| 136 | /* | ||
| 137 | * User setup structure passed with BLKTRACESTART | ||
| 138 | */ | ||
| 139 | struct blk_user_trace_setup { | ||
| 140 | char name[BDEVNAME_SIZE]; /* output */ | ||
| 141 | u16 act_mask; /* input */ | ||
| 142 | u32 buf_size; /* input */ | ||
| 143 | u32 buf_nr; /* input */ | ||
| 144 | u64 start_lba; | ||
| 145 | u64 end_lba; | ||
| 146 | u32 pid; | ||
| 147 | }; | ||
| 148 | |||
| 149 | #ifdef __KERNEL__ | ||
| 150 | #if defined(CONFIG_BLK_DEV_IO_TRACE) | ||
| 151 | extern int blk_trace_ioctl(struct block_device *, unsigned, char __user *); | 158 | extern int blk_trace_ioctl(struct block_device *, unsigned, char __user *); |
| 152 | extern void blk_trace_shutdown(struct request_queue *); | 159 | extern void blk_trace_shutdown(struct request_queue *); |
| 153 | extern void __blk_add_trace(struct blk_trace *, sector_t, int, int, u32, int, int, void *); | 160 | extern void __blk_add_trace(struct blk_trace *, sector_t, int, int, u32, int, int, void *); |
| @@ -195,6 +202,9 @@ static inline void blk_add_trace_rq(struct request_queue *q, struct request *rq, | |||
| 195 | if (likely(!bt)) | 202 | if (likely(!bt)) |
| 196 | return; | 203 | return; |
| 197 | 204 | ||
| 205 | if (blk_discard_rq(rq)) | ||
| 206 | rw |= (1 << BIO_RW_DISCARD); | ||
| 207 | |||
| 198 | if (blk_pc_request(rq)) { | 208 | if (blk_pc_request(rq)) { |
| 199 | what |= BLK_TC_ACT(BLK_TC_PC); | 209 | what |= BLK_TC_ACT(BLK_TC_PC); |
| 200 | __blk_add_trace(bt, 0, rq->data_len, rw, what, rq->errors, sizeof(rq->cmd), rq->cmd); | 210 | __blk_add_trace(bt, 0, rq->data_len, rw, what, rq->errors, sizeof(rq->cmd), rq->cmd); |
