blktrace_api.h
001: #ifndef BLKTRACE_H
002: #define BLKTRACE_H
003:
004: #include <linux/types.h>
005:
006:
007:
008:
009: enum blktrace_cat {
010: BLK_TC_READ = 1 << 0,
011: BLK_TC_WRITE = 1 << 1,
012: BLK_TC_FLUSH = 1 << 2,
013: BLK_TC_SYNC = 1 << 3,
014: BLK_TC_SYNCIO = BLK_TC_SYNC,
015: BLK_TC_QUEUE = 1 << 4,
016: BLK_TC_REQUEUE = 1 << 5,
017: BLK_TC_ISSUE = 1 << 6,
018: BLK_TC_COMPLETE = 1 << 7,
019: BLK_TC_FS = 1 << 8,
020: BLK_TC_PC = 1 << 9,
021: BLK_TC_NOTIFY = 1 << 10,
022: BLK_TC_AHEAD = 1 << 11,
023: BLK_TC_META = 1 << 12,
024: BLK_TC_DISCARD = 1 << 13,
025: BLK_TC_DRV_DATA = 1 << 14,
026: BLK_TC_FUA = 1 << 15,
027:
028: BLK_TC_END = 1 << 15,
029: };
030:
031: #define BLK_TC_SHIFT (16)
032: #define BLK_TC_ACT(act) ((act) << BLK_TC_SHIFT)
033:
034:
035:
036:
037: enum blktrace_act {
038: __BLK_TA_QUEUE = 1,
039: __BLK_TA_BACKMERGE,
040: __BLK_TA_FRONTMERGE,
041: __BLK_TA_GETRQ,
042: __BLK_TA_SLEEPRQ,
043: __BLK_TA_REQUEUE,
044: __BLK_TA_ISSUE,
045: __BLK_TA_COMPLETE,
046: __BLK_TA_PLUG,
047: __BLK_TA_UNPLUG_IO,
048: __BLK_TA_UNPLUG_TIMER,
049: __BLK_TA_INSERT,
050: __BLK_TA_SPLIT,
051: __BLK_TA_BOUNCE,
052: __BLK_TA_REMAP,
053: __BLK_TA_ABORT,
054: __BLK_TA_DRV_DATA,
055: };
056:
057:
058:
059:
060: enum blktrace_notify {
061: __BLK_TN_PROCESS = 0,
062: __BLK_TN_TIMESTAMP,
063: __BLK_TN_MESSAGE,
064: };
065:
066:
067:
068:
069:
070: #define BLK_TA_QUEUE (__BLK_TA_QUEUE | BLK_TC_ACT(BLK_TC_QUEUE))
071: #define BLK_TA_BACKMERGE (__BLK_TA_BACKMERGE | BLK_TC_ACT(BLK_TC_QUEUE))
072: #define BLK_TA_FRONTMERGE (__BLK_TA_FRONTMERGE | BLK_TC_ACT(BLK_TC_QUEUE))
073: #define BLK_TA_GETRQ (__BLK_TA_GETRQ | BLK_TC_ACT(BLK_TC_QUEUE))
074: #define BLK_TA_SLEEPRQ (__BLK_TA_SLEEPRQ | BLK_TC_ACT(BLK_TC_QUEUE))
075: #define BLK_TA_REQUEUE (__BLK_TA_REQUEUE | BLK_TC_ACT(BLK_TC_REQUEUE))
076: #define BLK_TA_ISSUE (__BLK_TA_ISSUE | BLK_TC_ACT(BLK_TC_ISSUE))
077: #define BLK_TA_COMPLETE (__BLK_TA_COMPLETE| BLK_TC_ACT(BLK_TC_COMPLETE))
078: #define BLK_TA_PLUG (__BLK_TA_PLUG | BLK_TC_ACT(BLK_TC_QUEUE))
079: #define BLK_TA_UNPLUG_IO (__BLK_TA_UNPLUG_IO | BLK_TC_ACT(BLK_TC_QUEUE))
080: #define BLK_TA_UNPLUG_TIMER (__BLK_TA_UNPLUG_TIMER | BLK_TC_ACT(BLK_TC_QUEUE))
081: #define BLK_TA_INSERT (__BLK_TA_INSERT | BLK_TC_ACT(BLK_TC_QUEUE))
082: #define BLK_TA_SPLIT (__BLK_TA_SPLIT)
083: #define BLK_TA_BOUNCE (__BLK_TA_BOUNCE)
084: #define BLK_TA_REMAP (__BLK_TA_REMAP | BLK_TC_ACT(BLK_TC_QUEUE))
085: #define BLK_TA_ABORT (__BLK_TA_ABORT | BLK_TC_ACT(BLK_TC_QUEUE))
086: #define BLK_TA_DRV_DATA (__BLK_TA_DRV_DATA | BLK_TC_ACT(BLK_TC_DRV_DATA))
087:
088: #define BLK_TN_PROCESS (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY))
089: #define BLK_TN_TIMESTAMP (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY))
090: #define BLK_TN_MESSAGE (__BLK_TN_MESSAGE | BLK_TC_ACT(BLK_TC_NOTIFY))
091:
092: #define BLK_IO_TRACE_MAGIC 0x65617400
093: #define BLK_IO_TRACE_VERSION 0x07
094:
095:
096:
097:
098: struct blk_io_trace {
099: __u32 magic;
100: __u32 sequence;
101: __u64 time;
102: __u64 sector;
103: __u32 bytes;
104: __u32 action;
105: __u32 pid;
106: __u32 device;
107: __u32 cpu;
108: __u16 error;
109: __u16 pdu_len;
110: };
111:
112:
113:
114:
115: struct blk_io_trace_remap {
116: __be32 device_from;
117: __be32 device_to;
118: __be64 sector_from;
119: };
120:
121: enum {
122: Blktrace_setup = 1,
123: Blktrace_running,
124: Blktrace_stopped,
125: };
126:
127: #define BLKTRACE_BDEV_SIZE 32
128:
129:
130:
131:
132: struct blk_user_trace_setup {
133: char name[BLKTRACE_BDEV_SIZE];
134: __u16 act_mask;
135: __u32 buf_size;
136: __u32 buf_nr;
137: __u64 start_lba;
138: __u64 end_lba;
139: __u32 pid;
140: };
141:
142: #endif
143:
© Andrew Scott 2006 -
2025,
All Rights Reserved