]>
Commit | Line | Data |
---|---|---|
2cb7cef9 BS |
1 | From: Gerald Schaefer <geraldsc@de.ibm.com> |
2 | Subject: (kernel):FCP - Performance Data colletion & analysis | |
3 | References: bnc#417243 | |
4 | ||
5 | This patch adds the new api call blk_add_driver_data() to blktrace. | |
6 | It allows to trace device driver-specific binary data. | |
7 | ||
8 | Signed-off-by: Stefan Raspl <raspl@linux.vnet.ibm.com> | |
9 | Signed-off-by: Martin Peschke <mp3@de.ibm.com> | |
10 | ||
11 | Acked-by: John Jolly <jjolly@suse.de> | |
12 | ||
13 | --- | |
14 | include/linux/blktrace_api.h | 32 ++++++++++++++++++++++++++++++++ | |
15 | 1 file changed, 32 insertions(+) | |
16 | ||
17 | --- a/include/linux/blktrace_api.h | |
18 | +++ b/include/linux/blktrace_api.h | |
19 | @@ -23,6 +23,7 @@ enum blktrace_cat { | |
20 | BLK_TC_NOTIFY = 1 << 10, /* special message */ | |
21 | BLK_TC_AHEAD = 1 << 11, /* readahead */ | |
22 | BLK_TC_META = 1 << 12, /* metadata */ | |
23 | + BLK_TC_DRV_DATA = 1 << 13, /* binary per-driver data */ | |
24 | ||
25 | BLK_TC_END = 1 << 15, /* only 16-bits, reminder */ | |
26 | }; | |
27 | @@ -49,6 +50,7 @@ enum blktrace_act { | |
28 | __BLK_TA_SPLIT, /* bio was split */ | |
29 | __BLK_TA_BOUNCE, /* bio was bounced */ | |
30 | __BLK_TA_REMAP, /* bio was remapped */ | |
31 | + __BLK_TA_DRV_DATA, /* driver-specific binary data */ | |
32 | }; | |
33 | ||
34 | /* | |
35 | @@ -79,6 +81,7 @@ enum blktrace_notify { | |
36 | #define BLK_TA_SPLIT (__BLK_TA_SPLIT) | |
37 | #define BLK_TA_BOUNCE (__BLK_TA_BOUNCE) | |
38 | #define BLK_TA_REMAP (__BLK_TA_REMAP | BLK_TC_ACT(BLK_TC_QUEUE)) | |
39 | +#define BLK_TA_DRV_DATA (__BLK_TA_DRV_DATA | BLK_TC_ACT(BLK_TC_DRV_DATA)) | |
40 | ||
41 | #define BLK_TN_PROCESS (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY)) | |
42 | #define BLK_TN_TIMESTAMP (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY)) | |
43 | @@ -313,6 +316,34 @@ static inline void blk_add_trace_remap(s | |
44 | __blk_add_trace(bt, from, bio->bi_size, bio->bi_rw, BLK_TA_REMAP, !bio_flagged(bio, BIO_UPTODATE), sizeof(r), &r); | |
45 | } | |
46 | ||
47 | +/** | |
48 | + * blk_add_driver_data - Add binary message with driver-specific data | |
49 | + * @q: queue the io is for | |
50 | + * @rq: io request | |
51 | + * @data: driver-specific data | |
52 | + * @len: length of driver-specific data | |
53 | + * | |
54 | + * Description: | |
55 | + * Some drivers might want to write driver-specific data per request. | |
56 | + * | |
57 | + **/ | |
58 | +static inline void blk_add_driver_data(struct request_queue *q, | |
59 | + struct request *rq, | |
60 | + void *data, size_t len) | |
61 | +{ | |
62 | + struct blk_trace *bt = q->blk_trace; | |
63 | + | |
64 | + if (likely(!bt)) | |
65 | + return; | |
66 | + | |
67 | + if (blk_pc_request(rq)) | |
68 | + __blk_add_trace(bt, 0, rq->data_len, 0, BLK_TA_DRV_DATA, | |
69 | + rq->errors, len, data); | |
70 | + else | |
71 | + __blk_add_trace(bt, rq->hard_sector, rq->hard_nr_sectors << 9, | |
72 | + 0, BLK_TA_DRV_DATA, rq->errors, len, data); | |
73 | +} | |
74 | + | |
75 | extern int blk_trace_setup(struct request_queue *q, char *name, dev_t dev, | |
76 | char __user *arg); | |
77 | extern int blk_trace_startstop(struct request_queue *q, int start); | |
78 | @@ -326,6 +357,7 @@ extern int blk_trace_remove(struct reque | |
79 | #define blk_add_trace_generic(q, rq, rw, what) do { } while (0) | |
80 | #define blk_add_trace_pdu_int(q, what, bio, pdu) do { } while (0) | |
81 | #define blk_add_trace_remap(q, bio, dev, f, t) do {} while (0) | |
82 | +#define blk_add_driver_data(q, rq, data, len) do {} while (0) | |
83 | #define do_blk_trace_setup(q, name, dev, buts) (-ENOTTY) | |
84 | #define blk_trace_setup(q, name, dev, arg) (-ENOTTY) | |
85 | #define blk_trace_startstop(q, start) (-ENOTTY) |