diff options
Diffstat (limited to 'tools/biolatpcts.py')
-rwxr-xr-x | tools/biolatpcts.py | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/tools/biolatpcts.py b/tools/biolatpcts.py index a2f59592..ea8b1ce6 100755 --- a/tools/biolatpcts.py +++ b/tools/biolatpcts.py @@ -56,6 +56,7 @@ parser.add_argument('--verbose', '-v', action='count', default = 0) bpf_source = """ #include <linux/blk_types.h> #include <linux/blkdev.h> +#include <linux/blk-mq.h> #include <linux/time64.h> BPF_PERCPU_ARRAY(rwdf_100ms, u64, 400); @@ -71,9 +72,9 @@ void kprobe_blk_account_io_done(struct pt_regs *ctx, struct request *rq, u64 now if (!rq->__START_TIME_FIELD__) return; - if (!rq->rq_disk || - rq->rq_disk->major != __MAJOR__ || - rq->rq_disk->first_minor != __MINOR__) + if (!rq->__RQ_DISK__ || + rq->__RQ_DISK__->major != __MAJOR__ || + rq->__RQ_DISK__->first_minor != __MINOR__) return; cmd_flags = rq->cmd_flags; @@ -141,6 +142,11 @@ bpf_source = bpf_source.replace('__START_TIME_FIELD__', start_time_field) bpf_source = bpf_source.replace('__MAJOR__', str(major)) bpf_source = bpf_source.replace('__MINOR__', str(minor)) +if BPF.kernel_struct_has_field(b'request', b'rq_disk'): + bpf_source = bpf_source.replace('__RQ_DISK__', 'rq_disk') +else: + bpf_source = bpf_source.replace('__RQ_DISK__', 'q->disk') + bpf = BPF(text=bpf_source) if BPF.get_kprobe_functions(b'__blk_account_io_done'): bpf.attach_kprobe(event="__blk_account_io_done", fn_name="kprobe_blk_account_io_done") |