driver data: add support to blktrace kernel code
Subsystems (2)
PATCH 1/3 driver data: add support to blktrace kernel code
From: Stefan Raspl <[email protected]>
This patch adds the new api call blk_add_driver_data() to blktrace. It allows to trace device driver-specific binary data.
Signed-off-by Stefan Raspl <[email protected]>
Signed-off-by Martin Peschke <[email protected]>
--- include/linux/blktrace_api.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+)
include/linux/blktrace_api.h +32 -0
@@ -23,6 +23,7 @@ enum blktrace_cat {BLK_TC_NOTIFY =1 <<10 ,/* special message */ BLK_TC_AHEAD =1 <<11 ,/* readahead */ BLK_TC_META =1 <<12 ,/* metadata */ +BLK_TC_DRV_DATA =1 <<13 ,/* binary per-driver data */ BLK_TC_END = 1 << 15, /* only 16-bits, reminder */ };
@@ -49,6 +50,7 @@ enum blktrace_act { __BLK_TA_SPLIT,/* bio was split */ __BLK_TA_BOUNCE,/* bio was bounced */ __BLK_TA_REMAP,/* bio was remapped */ + __BLK_TA_DRV_DATA, /* driver-specific binary data */ };/*
@@ -79,6 +81,7 @@ enum blktrace_notify {#define BLK_TA_SPLIT (__BLK_TA_SPLIT)#define BLK_TA_BOUNCE (__BLK_TA_BOUNCE)#define BLK_TA_REMAP (__BLK_TA_REMAP | BLK_TC_ACT(BLK_TC_QUEUE)) +#define BLK_TA_DRV_DATA (__BLK_TA_DRV_DATA | BLK_TC_ACT(BLK_TC_DRV_DATA))#define BLK_TN_PROCESS (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY))#define BLK_TN_TIMESTAMP (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY))
@@ -312,6 +315,34 @@ static inline void blk_add_trace_remap(s__blk_add_trace (bt, from, bio->bi_size, bio->bi_rw,BLK_TA_REMAP , !bio_flagged (bio,BIO_UPTODATE ),sizeof (r), &r); } +/** +* blk_add_driver_data - Add binary message with driver-specific data +* @q: queue the io is for +* @rq: io request +* @data: driver-specific data +* @len: length of driver-specific data +* +* Description: +* Some drivers might want to write driver-specific data per request. +* +**/ +static inline void blk_add_driver_data (struct request_queue *q, +struct request *rq, +void *data,size_t len) +{ +struct blk_trace *bt = q->blk_trace; + +if (likely (!bt)) +return ; + +if (blk_pc_request (rq)) +__blk_add_trace (bt,0 , rq->data_len,0 ,BLK_TA_DRV_DATA , + rq->errors, len, data); +else +__blk_add_trace (bt, rq->hard_sector, rq->hard_nr_sectors <<9 , +0 ,BLK_TA_DRV_DATA , rq->errors, len, data); +} +extern int blk_trace_setup (struct request_queue *q,char *name,dev_t dev,char __user *arg);extern int blk_trace_startstop (struct request_queue *q,int start);
@@ -325,6 +356,7 @@ extern int blk_trace_remove(struct reque#define blk_add_trace_generic (q, rq, rw, what) do { } while (0)#define blk_add_trace_pdu_int (q, what, bio, pdu) do { } while (0)#define blk_add_trace_remap (q, bio, dev, f, t) do {} while (0) +#define blk_add_driver_data (q, rq, data, len) do {} while (0)#define do_blk_trace_setup (q, name, dev, buts) (-ENOTTY)#define blk_trace_setup (q, name, dev, arg) (-ENOTTY)#define blk_trace_startstop (q, start) (-ENOTTY)
PATCH 1/3 driver data: add support to blktrace kernel code
From: Stefan Raspl <[email protected]>
This patch adds the new api call blk_add_driver_data() to blktrace. It allows to trace device driver-specific binary data.
Signed-off-by Stefan Raspl <[email protected]>
Signed-off-by Martin Peschke <[email protected]>
--- include/linux/blktrace_api.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+)
include/linux/blktrace_api.h +32 -0
@@ -21,6 +21,7 @@ enum blktrace_cat {BLK_TC_NOTIFY =1 <<10 ,/* special message */ BLK_TC_AHEAD =1 <<11 ,/* readahead */ BLK_TC_META =1 <<12 ,/* metadata */ +BLK_TC_DRV_DATA =1 <<13 ,/* binary per-driver data */ BLK_TC_END = 1 << 15, /* only 16-bits, reminder */ };
@@ -47,6 +48,7 @@ enum blktrace_act { __BLK_TA_SPLIT,/* bio was split */ __BLK_TA_BOUNCE,/* bio was bounced */ __BLK_TA_REMAP,/* bio was remapped */ + __BLK_TA_DRV_DATA, /* driver-specific binary data */ };/*
@@ -77,6 +79,7 @@ enum blktrace_notify {#define BLK_TA_SPLIT (__BLK_TA_SPLIT)#define BLK_TA_BOUNCE (__BLK_TA_BOUNCE)#define BLK_TA_REMAP (__BLK_TA_REMAP | BLK_TC_ACT(BLK_TC_QUEUE)) +#define BLK_TA_DRV_DATA (__BLK_TA_DRV_DATA | BLK_TC_ACT(BLK_TC_DRV_DATA))#define BLK_TN_PROCESS (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY))#define BLK_TN_TIMESTAMP (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY))
@@ -307,6 +310,34 @@ static inline void blk_add_trace_remap(s__blk_add_trace (bt, from, bio->bi_size, bio->bi_rw,BLK_TA_REMAP , !bio_flagged (bio,BIO_UPTODATE ),sizeof (r), &r); } +/** +* blk_add_driver_data - Add binary message with driver-specific data +* @q: queue the io is for +* @rq: io request +* @data: driver-specific data +* @len: length of driver-specific data +* +* Description: +* Some drivers might want to write driver-specific data per request. +* +**/ +static inline void blk_add_driver_data (struct request_queue *q, +struct request *rq, +void *data,size_t len) +{ +struct blk_trace *bt = q->blk_trace; + +if (likely (!bt)) +return ; + +if (blk_pc_request (rq)) +__blk_add_trace (bt,0 , rq->data_len,0 ,BLK_TA_DRV_DATA , + rq->errors, len, data); +else +__blk_add_trace (bt, rq->hard_sector, rq->hard_nr_sectors <<9 , +0 ,BLK_TA_DRV_DATA , rq->errors, len, data); +} +extern int blk_trace_setup (struct request_queue *q,char *name,dev_t dev,char __user *arg);extern int blk_trace_startstop (struct request_queue *q,int start);
@@ -320,6 +351,7 @@ extern int blk_trace_remove(struct reque#define blk_add_trace_generic (q, rq, rw, what) do { } while (0)#define blk_add_trace_pdu_int (q, what, bio, pdu) do { } while (0)#define blk_add_trace_remap (q, bio, dev, f, t) do {} while (0) +#define blk_add_driver_data (q, rq, data, len) do {} while (0)#define do_blk_trace_setup (q, name, dev, buts) (-ENOTTY)#define blk_trace_setup (q, name, dev, arg) (-ENOTTY)#define blk_trace_startstop (q, start) (-ENOTTY)