@@ -63,8 +63,9 @@ $hists:{hist|
63
63
BPF_HASH($hist.name$, io_hist_key_t, u64);
64
64
}$
65
65
66
- int disk_io_start(struct pt_regs *ctx, struct request *reqp )
66
+ int disk_io_start(struct bpf_raw_tracepoint_args *ctx)
67
67
{
68
+ struct request *reqp = (struct request *)ctx->args[0];
68
69
io_data_t data = {};
69
70
struct gendisk *diskp = reqp->q->disk;
70
71
data.ts = bpf_ktime_get_ns();
@@ -101,17 +102,19 @@ static int aggregate_data(io_data_t *data, u64 ts, char *opstr)
101
102
return 0;
102
103
}
103
104
104
- int disk_io_done(struct pt_regs *ctx, struct request *reqp )
105
+ int disk_io_done(struct bpf_raw_tracepoint_args *ctx)
105
106
{
107
+ struct request *reqp = (struct request *)ctx->args[0];
108
+
106
109
u64 ts = bpf_ktime_get_ns();
107
110
io_data_t *data = io_base_data.lookup((u64 *) &reqp);
108
- struct bio *bp = reqp->bio;
111
+ struct bio *bp = (struct bio *) reqp->bio;
109
112
110
113
if (data == 0) {
111
114
return 0; // missed issue
112
115
}
113
116
114
- data->err = (bp->bi_status == BLK_STS_OK) ? 0 : 1;
117
+ data->err = (bp != NULL && bp ->bi_status == BLK_STS_OK) ? 0 : 1;
115
118
116
119
// Perform aggregations
117
120
if ((data->cmd_flags & REQ_OP_MASK) == REQ_OP_WRITE) {
@@ -125,11 +128,8 @@ int disk_io_done(struct pt_regs *ctx, struct request *reqp)
125
128
}
126
129
""" # noqa: W293
127
130
b = BPF(text=bpf_text)
128
-
129
- if BPF.get_kprobe_functions(b'blk_start_request'):
130
- b.attach_kprobe(event="blk_start_request", fn_name="disk_io_start")
131
- b.attach_kprobe(event="blk_mq_start_request", fn_name="disk_io_start")
132
- b.attach_kprobe(event="blk_mq_end_request", fn_name="disk_io_done")
131
+ b.attach_raw_tracepoint("block_io_start", fn_name="disk_io_start")
132
+ b.attach_raw_tracepoint("block_io_done", fn_name="disk_io_done")
133
133
134
134
135
135
helper = BCCHelper(b, BCCHelper.ANALYTICS_PRINT_MODE)
0 commit comments