@@ -63,8 +63,9 @@ $hists:{hist|
6363BPF_HASH($hist.name$, io_hist_key_t, u64);
6464}$
6565
66- int disk_io_start(struct pt_regs *ctx, struct request *reqp )
66+ int disk_io_start(struct bpf_raw_tracepoint_args *ctx)
6767{
68+ struct request *reqp = (struct request *)ctx->args[0];
6869 io_data_t data = {};
6970 struct gendisk *diskp = reqp->q->disk;
7071 data.ts = bpf_ktime_get_ns();
@@ -101,17 +102,19 @@ static int aggregate_data(io_data_t *data, u64 ts, char *opstr)
101102 return 0;
102103}
103104
104- int disk_io_done(struct pt_regs *ctx, struct request *reqp )
105+ int disk_io_done(struct bpf_raw_tracepoint_args *ctx)
105106{
107+ struct request *reqp = (struct request *)ctx->args[0];
108+
106109 u64 ts = bpf_ktime_get_ns();
107110 io_data_t *data = io_base_data.lookup((u64 *) &reqp);
108- struct bio *bp = reqp->bio;
111+ struct bio *bp = (struct bio *) reqp->bio;
109112
110113 if (data == 0) {
111114 return 0; // missed issue
112115 }
113116
114- data->err = (bp->bi_status == BLK_STS_OK) ? 0 : 1;
117+ data->err = (bp != NULL && bp ->bi_status == BLK_STS_OK) ? 0 : 1;
115118
116119 // Perform aggregations
117120 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)
125128}
126129""" # noqa: W293
127130b = 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")
133133
134134
135135helper = BCCHelper(b, BCCHelper.ANALYTICS_PRINT_MODE)
0 commit comments