xref: /aosp_15_r20/external/bcc/libbpf-tools/vfsstat.bpf.c (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1*387f9dfdSAndroid Build Coastguard Worker // SPDX-License-Identifier: GPL-2.0
2*387f9dfdSAndroid Build Coastguard Worker // Copyright (c) 2020 Anton Protopopov
3*387f9dfdSAndroid Build Coastguard Worker //
4*387f9dfdSAndroid Build Coastguard Worker // Based on vfsstat(8) from BCC by Brendan Gregg
5*387f9dfdSAndroid Build Coastguard Worker #include <vmlinux.h>
6*387f9dfdSAndroid Build Coastguard Worker #include <bpf/bpf_helpers.h>
7*387f9dfdSAndroid Build Coastguard Worker #include <bpf/bpf_tracing.h>
8*387f9dfdSAndroid Build Coastguard Worker #include "vfsstat.h"
9*387f9dfdSAndroid Build Coastguard Worker 
10*387f9dfdSAndroid Build Coastguard Worker __u64 stats[S_MAXSTAT] = {};
11*387f9dfdSAndroid Build Coastguard Worker 
inc_stats(int key)12*387f9dfdSAndroid Build Coastguard Worker static __always_inline int inc_stats(int key)
13*387f9dfdSAndroid Build Coastguard Worker {
14*387f9dfdSAndroid Build Coastguard Worker 	__atomic_add_fetch(&stats[key], 1, __ATOMIC_RELAXED);
15*387f9dfdSAndroid Build Coastguard Worker 	return 0;
16*387f9dfdSAndroid Build Coastguard Worker }
17*387f9dfdSAndroid Build Coastguard Worker 
18*387f9dfdSAndroid Build Coastguard Worker SEC("kprobe/vfs_read")
BPF_KPROBE(kprobe_vfs_read)19*387f9dfdSAndroid Build Coastguard Worker int BPF_KPROBE(kprobe_vfs_read)
20*387f9dfdSAndroid Build Coastguard Worker {
21*387f9dfdSAndroid Build Coastguard Worker 	return inc_stats(S_READ);
22*387f9dfdSAndroid Build Coastguard Worker }
23*387f9dfdSAndroid Build Coastguard Worker 
24*387f9dfdSAndroid Build Coastguard Worker SEC("kprobe/vfs_write")
BPF_KPROBE(kprobe_vfs_write)25*387f9dfdSAndroid Build Coastguard Worker int BPF_KPROBE(kprobe_vfs_write)
26*387f9dfdSAndroid Build Coastguard Worker {
27*387f9dfdSAndroid Build Coastguard Worker 	return inc_stats(S_WRITE);
28*387f9dfdSAndroid Build Coastguard Worker }
29*387f9dfdSAndroid Build Coastguard Worker 
30*387f9dfdSAndroid Build Coastguard Worker SEC("kprobe/vfs_fsync")
BPF_KPROBE(kprobe_vfs_fsync)31*387f9dfdSAndroid Build Coastguard Worker int BPF_KPROBE(kprobe_vfs_fsync)
32*387f9dfdSAndroid Build Coastguard Worker {
33*387f9dfdSAndroid Build Coastguard Worker 	return inc_stats(S_FSYNC);
34*387f9dfdSAndroid Build Coastguard Worker }
35*387f9dfdSAndroid Build Coastguard Worker 
36*387f9dfdSAndroid Build Coastguard Worker SEC("kprobe/vfs_open")
BPF_KPROBE(kprobe_vfs_open)37*387f9dfdSAndroid Build Coastguard Worker int BPF_KPROBE(kprobe_vfs_open)
38*387f9dfdSAndroid Build Coastguard Worker {
39*387f9dfdSAndroid Build Coastguard Worker 	return inc_stats(S_OPEN);
40*387f9dfdSAndroid Build Coastguard Worker }
41*387f9dfdSAndroid Build Coastguard Worker 
42*387f9dfdSAndroid Build Coastguard Worker SEC("kprobe/vfs_create")
BPF_KPROBE(kprobe_vfs_create)43*387f9dfdSAndroid Build Coastguard Worker int BPF_KPROBE(kprobe_vfs_create)
44*387f9dfdSAndroid Build Coastguard Worker {
45*387f9dfdSAndroid Build Coastguard Worker 	return inc_stats(S_CREATE);
46*387f9dfdSAndroid Build Coastguard Worker }
47*387f9dfdSAndroid Build Coastguard Worker 
48*387f9dfdSAndroid Build Coastguard Worker SEC("fentry/vfs_read")
BPF_PROG(fentry_vfs_read)49*387f9dfdSAndroid Build Coastguard Worker int BPF_PROG(fentry_vfs_read)
50*387f9dfdSAndroid Build Coastguard Worker {
51*387f9dfdSAndroid Build Coastguard Worker 	return inc_stats(S_READ);
52*387f9dfdSAndroid Build Coastguard Worker }
53*387f9dfdSAndroid Build Coastguard Worker 
54*387f9dfdSAndroid Build Coastguard Worker SEC("fentry/vfs_write")
BPF_PROG(fentry_vfs_write)55*387f9dfdSAndroid Build Coastguard Worker int BPF_PROG(fentry_vfs_write)
56*387f9dfdSAndroid Build Coastguard Worker {
57*387f9dfdSAndroid Build Coastguard Worker 	return inc_stats(S_WRITE);
58*387f9dfdSAndroid Build Coastguard Worker }
59*387f9dfdSAndroid Build Coastguard Worker 
60*387f9dfdSAndroid Build Coastguard Worker SEC("fentry/vfs_fsync")
BPF_PROG(fentry_vfs_fsync)61*387f9dfdSAndroid Build Coastguard Worker int BPF_PROG(fentry_vfs_fsync)
62*387f9dfdSAndroid Build Coastguard Worker {
63*387f9dfdSAndroid Build Coastguard Worker 	return inc_stats(S_FSYNC);
64*387f9dfdSAndroid Build Coastguard Worker }
65*387f9dfdSAndroid Build Coastguard Worker 
66*387f9dfdSAndroid Build Coastguard Worker SEC("fentry/vfs_open")
BPF_PROG(fentry_vfs_open)67*387f9dfdSAndroid Build Coastguard Worker int BPF_PROG(fentry_vfs_open)
68*387f9dfdSAndroid Build Coastguard Worker {
69*387f9dfdSAndroid Build Coastguard Worker 	return inc_stats(S_OPEN);
70*387f9dfdSAndroid Build Coastguard Worker }
71*387f9dfdSAndroid Build Coastguard Worker 
72*387f9dfdSAndroid Build Coastguard Worker SEC("fentry/vfs_create")
BPF_PROG(fentry_vfs_create)73*387f9dfdSAndroid Build Coastguard Worker int BPF_PROG(fentry_vfs_create)
74*387f9dfdSAndroid Build Coastguard Worker {
75*387f9dfdSAndroid Build Coastguard Worker 	return inc_stats(S_CREATE);
76*387f9dfdSAndroid Build Coastguard Worker }
77*387f9dfdSAndroid Build Coastguard Worker 
78*387f9dfdSAndroid Build Coastguard Worker char LICENSE[] SEC("license") = "GPL";
79