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